2

当我已经从 linq 带回一个日期并转换为短日期字符串时,我正在尝试使用 linq 按日期排序:

var NOVs = from n in db.CT_NOVs
join i in db.CT_Inspectors on n.ARBInspectorID equals i.CTInspectorID
join v in db.CT_ViolationTypes on n.ViolationTypeID equals v.ViolationTypeID
join t in db.CT_Tanks on n.CargoTankID equals t.CargoTankID
join c in db.CT_Companies on t.CompanyID equals c.CompanyID
select new
{
    n.NOVID,
    n.NOVNumber,
    NOVDate = n.NOVDate.Value.ToShortDateString(),
    ARBInspectorFirstName = i.FirstName,
    ARBInspectorLastName = i.LastName,
    v.ViolationName,
    t.CargoTankID,
    c.CompanyName
};

这是我尝试按日期排序的地方,但由于我将日期时间转换为短日期字符串,因此出现错误:

if (column == "NOVDate")
{
    if (sortDirection == "ascending")
        NOVs = NOVs.OrderBy(b => Convert.ToDateTime(b.NOVDate));
    else
        NOVs = NOVs.OrderByDescending(b => Convert.ToDateTime(b.NOVDate));
}

关于如何按 NOVDate 排序的任何线索?

4

3 回答 3

7

为什么不将其保留为完整的 DateTime 对象并在将其显示给用户之前将其转换为 ShortDateString?我通常会尝试将对象保留为原始格式,并在最后一秒将它们转换为显示给用户。这也有助于将数据层与表示层分开,即让表示层决定如何向用户显示日期;您的数据层不应该真正关心。

从评论:

由于您在<asp:BoundField>GridView 中使用元素,因此可以使用DataFormatString属性让网格视图自动对其进行格式化。

看起来使用DataFormatString="{0:d}"应该可以解决问题。(感谢格罗默!)

于 2012-09-18T21:00:51.947 回答
0

您可以在选择元素之前使用“orderby”子句。

检查此链接:http: //msdn.microsoft.com/en-us/library/bb383982.aspx

于 2012-09-18T21:03:35.317 回答
0

您先对其进行排序,然后根据需要显示它:

var NOVs = from n in db.CT_NOVs
               join i in db.CT_Inspectors on n.ARBInspectorID equals i.CTInspectorID
               join v in db.CT_ViolationTypes on n.ViolationTypeID equals v.ViolationTypeID
               join t in db.CT_Tanks on n.CargoTankID equals t.CargoTankID
               join c in db.CT_Companies on t.CompanyID equals c.CompanyID
               orderby n.NOVDate.Value
               select new
               {
                   n.NOVID,
                   n.NOVNumber,
                   NOVDate = n.NOVDate.Value.ToShortDateString(),
                   ARBInspectorFirstName = i.FirstName,
                   ARBInspectorLastName = i.LastName,
                   v.ViolationName,
                   t.CargoTankID,
                   c.CompanyName
               };

那么你可以这样做:

        if (column == "NOVDate")
        {
            if (sortDirection != "ascending")
                NOVs = NOVs.Reverse();               
        }
于 2012-09-18T21:12:52.080 回答