2012-08-01 70 views
1

說我有一個名爲存儲與記錄臺這種最新日期爲sql

Item_Id  | Date   | Price 
1   | 01/01/2011  | 50 
1   | 03/26/2012  | 25 
2   | 04/21/2012  | 20 
3   | 08/02/2012  | 15 
3   | 09/02/2012  | 13 
4   | 10/02/2012  | 18 

我想獲得ITEM_ID關聯到它的最新日期(在這種情況下,它會接着「 4「)使用linq to sql。

我用這個表達

var lastDate= Storage 
        .GroupBy(s => s.Item_Id) 
        .Select(grp => new { 
         grp.Key, 
         LastDate = grp.OrderByDescending(
          x => x.Date).First() 
        }).ToList(); 

,我越來越對每個ITEM_ID的最後日期列表。所以下一步將是獲得所有這些中最高的,但我卡在那裏。

實際上,最終我需要跳過查詢中的一些Item_Id,但我想我可以在Select之前添加一個where,像Where(s => s.Item.Id {和這裏是一個表達式,檢查它是否在我通過的列表中)。

我會很感激的任何提示,

感謝

+0

看到http://stackoverflow.com/questions/1101841/linq-how-to-perform-max-on-a-property-of-all-objects-in-a-collection-and-ret – 2012-08-01 23:36:16

回答

2

這是否對你的工作需要什麼?

var highestDateID = Storage.OrderByDescending(x => x.Date).Select(x => x.Item_Id).FirstOrDefault(); 
1

爲什麼不

var lastDateId = Storage 
    .GroupBy(s => s.Item_Id) 
    .Select(grp => new { Id = grp.Key, LastDate = grp.Max(x=>x.Date) }) 
    .OrderBy(o=>o.LastDate).Take(1).Id; 

甚至

var lastDateId = Storage.OrderByDescending(o=>o.LastDate).Take(1).Id; 

,如果你需要一個完整的記錄

var record = Storage 
    .Where(w=>w.Id == Storage.OrderByDescending(o=>o.LastDate).Take(1).Id) 
    .First(); 
+0

它不允許我以這種方式訪問​​Id,但我猜這是因爲我做錯了什麼。 – mitomed 2012-08-02 09:49:49