2011-09-03 109 views
0

我有以下信息LINQ查詢問題

日期,名稱列表,以及一些統計

名稱可以重複,但他們不一定。

所以比如我可能有

5,今天, 「約翰」
4,今天, 「金」
3,今天, 「彼得」
2,昨日, 「金」
1,昨天,「添」

我想要一個查詢,檢索每個用戶的最新記錄。在我的例子中,這將是記錄5,4和1.

我是否必須將每條記錄與整個數據庫進行匹配才能找出?
什麼是最好的表現查詢來實現這一目標?

+0

您的意思是古老的,而不是最新的?爲什麼你想要2而不是4如果最新意味着最新?在SQL中,你問的看起來像用戶名分組,並有Id =分鐘... –

+0

哎呀,我在上次編輯切換列表上的數字,忘了改變這一點。 – bevacqua

+0

你只有在LINQ或SQL中有問題,你能告訴我們哪個SQL查詢給你預期的結果嗎? –

回答

3

也許這樣的事情可以工作?

var linq = people.GroupBy(a => a.Name).Select(a => a.OrderBy(a => a.Date).Last()); 

加長版:

var linq = from person in people 
      group person by person.Name into grouped 
      select grouped.OrderBy(a => a.Date).Last(); 
+0

我認爲它應該按日期排序。 – vorrtex

+0

現在我認爲這是正確的。 –

+1

還有一個問題:它不適用於實體框架。最後一行必須是'grouped.OrderByDescending(a => a.Date).FirstOrDefault()'。但在這種情況下,它會通過'outer apply'生成奇怪的sql查詢:http://pastebin.com/q1TMbtty – vorrtex

0

這裏就是我想:

from u in context.Users 
group u by u.UserID into grouped 
select grouped.OrderByDescending(g => g.Date).First()