2009-07-31 13 views
4

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

例えば、典型的な値はなど、「2009年5月12日」、「2008年1月14日」であってもよい

以下のOrderBy句は、(文字列データかのように)注文に対して正しく動作しますが、I実際にはその値をDateTimesとして扱い、Dateによるソートを実行したいと考えています。 (sortColumnは「dateCreated」のようなものになるでしょう。)

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

これを行うには、述語の値を変換する方法はありますか?どんな助けにも感謝!

答えて

7

むしろ総及び非効率的な:それによってソートその後、

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(); 
+3

最初のバージョンが「総体的かつ非効率的」であるという根拠は何ですか? –

1

プロジェクト日付/時刻値と:

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

検索/解析の数を減らすこと。

var orderedList = 
    (from p in unorderedList 
    let value = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value) 
    orderby value 
    select p) 
    .ToList(); 
関連する問題