4

データ型 String であるが実際には解析可能な DateTime を含む値に対して OrderBy を実行できるラムダ式 (Linq、C# 3.5) を作成しようとしています。

たとえば、典型的な値は "5/12/2009" 、 "1/14/2008" などです。

以下の OrderBy 句は (文字列データのように) 順序付けには正しく機能しますが、実際には値を DateTimes として扱い、Date による並べ替えを実行したいと考えています。(sortColumn は「dateCreated」のようなものになります。)

List<MyObject> orderedList = unorderedList.OrderBy(p => p.Details.Find(s => s.Name == sortColumn).Value).ToList();

これを行うために述語の値を変換する方法はありますか? どんな助けでも大歓迎です!

4

2 に答える 2

8

むしろ大雑把で非効率的:

List<MyObject> orderedList = unorderedList.OrderBy(p => DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)).ToList();

検索/解析の回数を減らすには:

List<MyObject> orderedList =
    (from extracted in (from p in unorderedList
                        select new { Item = p, Date = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value })
     orderby extracted.Date
     select extracted.Item)
    .ToList();
于 2009-07-31T17:55:13.800 に答える
1

日付/時刻の値を投影し、それで並べ替えます。

var orderedList =
    (from p in unorderedList
     let value = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)
     orderby value
     select p)
     .ToList();
于 2009-07-31T18:09:32.600 に答える