2010-09-09 47 views
0

我正在使用實體框架來連接數據庫。返回所有具有最大值的行

我有一個表(我們稱之爲「文件」)的富人幾個領域:

ID,版本,XYZ Primarky關鍵是基於ID和版本。 所以我可以有幾個具有相同ID但不同版本(和反向)的行。

的問題是:

我怎麼能與一個lambda表達式,問我的實體框架,回到我的「文件」的所有最後一個版本。

舉例: DATAS:

ID;Version;Other 
1;1;YX 
1;2;YZ 
2;1;AH 
2;2;BH 
2;5;CA 
1;3;AAA 

結果:

1;3;AAA 
2;5;CA 

謝謝!

!!目標是數據庫不需要返回所有的行,並且只需要一次調用,所以忘掉像GetAllRows這樣的解決方案,閱讀整個集合並只保存最新的,或者獲取所有可能的ID列表並獲取最後一個在另一個請求中的foreach版本。謝謝!

+0

您明確要求提供lambda表達式,爲什麼? – 2010-09-09 09:03:37

+0

因爲所有的項目都使用這個,但它只是一個獎金;) – J4N 2010-09-10 11:30:52

+0

如果我給的答案是正確的,你能標記它爲回答嗎? – 2010-09-15 08:01:08

回答

1

您可以使用此以下LinqToEntites查詢:

var result = from f in myEntities.Files 
      group f by f.ID into g 
      select g.OrderByDescending(f => f.Version).FirstOrDefault(); 

這或許會更有意義,使用First代替FirstOrDefault但你得到一個UnsupportedException

的方法「,第'只能用作最終的查詢操作。考慮在這種情況下使用方法'FirstOrDefault'而不是

+0

太好了,我會得到整個「實體」或只是包含在組條件中的「f.Id」? – J4N 2010-09-10 11:29:30

+0

該查詢將返回整個實體。變量'g'實際上是一個'IEnumerable ',帶有一個額外的屬性:'Key'。 – 2010-09-10 12:11:33