2009-07-31 32 views
4

我試圖創建一個lambda表達式(LINQ,C#3.5),可以在該數據是字符串類型,但實際上包含一個語法分析的日期時間的值進行排序依據。需要lambda表達式的OrderBy與日期時間轉換

例如,典型的值可以是「2009年5月12日」,「1/14/2008」等

下的OrderBy子句工作正常訂購(彷彿字符串數據),但我實際上希望將這些值視爲DateTimes,並按日期執行排序。 (該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

第一個版本的原理是什麼?「總體效率低下」? – 2009-07-31 18:09:27

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