2

linqから戻ってきた日付をshortdatestringに変換したときに、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
};

ここで日付で並べ替えようとしましたが、日時をshortdatestringに変換したため、エラーが発生します。

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に変換してみませんか?私は通常、オブジェクトをネイティブ形式のままにして、最後の1秒でユーザーに表示するように変換しようとします。これは、データ層をプレゼンテーション層から分離するのにも役立ちます。つまり、プレゼンテーション層に、ユーザーに日付を表​​示する方法を決定させることができます。あなたのデータ層は本当に気にするべきではありません。

コメントから:

<asp:BoundField>GridViewで要素を使用しているため、DataFormatStringプロパティを使用して、グリッドビューで要素を自動的にフォーマットすることができます。

使用DataFormatString="{0:d}"することでうまくいくようです。(Gromerに感謝します!)

于 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 に答える