2010-08-27 49 views
1

我有一個表格,爲了這個例子可以說它有三列:Name,DateAdded,Note。在這個表格中將會有多個具有相同名稱的記錄。我需要一個linq where子句,它會給我一個結果集,其中包含每個名稱的最新記錄。Linq to Entities 3.5最近的日期

所以,如果我有以下信息:

Name, DateAdded, Note 
Alpha, 1/1/2010, note one 
Alpha, 1/2/2010, note two 
Alpha, 1/3/2010, note three 
Beta, 1/4/2010, note four 
Beta, 1/5/2010, note five 

我希望得到以下結果:

Name, DateAdded, Note 
Alpha, 1/3/2010, note three 
Beta, 1/5/2010, note five 

在實際使用這將是一個搜索選項,所以我需要它如果可能的話,我可以附加到IQueryable集合中。

回答

0
from row in rows 
group row by row.Name into grouping 
from g in grouping 
where g.DateAdded == grouping.Max(x => x.DateAdded) 
select g; 

如果有多個行與一些組的最大DateAdded,這將返回所有這些行。

您不需要只有一個Where子句。如果rowsIQueryable,那麼此查詢的結果也是如此,因此您可以將其用作鏈的一部分。但我不知道這個查詢轉換爲SQL有多好。

+0

您可以嘗試類似'where g == grouping.OrderByDescending(x => x.DateAdded).First()'來確保爲每個組獲得單行。 – 2010-08-28 07:22:04

+0

我不知道爲什麼你的代碼不適合我,但我能夠這樣做: results = results.Where(i => i.DateAdded == context.rows.Where(o => o.row.name == i.row.name).OrderByDescending(o => o.DateAdded).FirstOrDefault()。DateAdded); 感謝您的幫助。 – William 2010-08-28 18:34:30