2013-01-24 51 views
-1

我已經在列表中的下列項目:的LINQ的GroupBy多個領域

Date   Amount AnId  AnotherId MainDate 
2013/01/10 1000  1  5   2013/01/12 
2013/01/11 2000  2  5   2013/01/12 
2013/01/15 4000  1  5   2013/01/12 

我想使用LINQ返回如下:

Date   Amount AnId  AnotherId MainDate 
2013/01/11 2000  2  5   2013/01/12 
2013/01/15 4000  1  5   2013/01/12 

即特定MainDate,我只想要最新的產品在AnIdanotherId之間是唯一的。因此,在2013年1月10日該項目被刪除,因爲是同一個MainDateAnIdAnotherId有晚於項目日期的日期我一直在試圖項目...

集團通過MainDate然後通過AnIdAnotherIdOrderByDescending,然後爲每個組選擇的第一個項目,但不要太避讓LINQ的,所以我用lambda表達式,你掙扎......

+0

請添加您的LINQ的C#/ VB代碼和你嘗試過的lambda,並沒有得到你期望的結果。這對我們來說更容易看到它出錯的地方。 – Bazzz

+0

[按多列分組]可能重複(http://stackoverflow.com/questions/847066/group-by-multiple-columns) – nawfal

回答

2

使用相同anonymous類型的點號,你在查詢表達式做:

var qry = cust.GroupBy(cm => new { cm.MainDate, cm.AnId , cm.AnotherId }) 

參見:
How to Group By multiple columns in LINQ ?
LINQ Group By Multiple fields -Syntax help

+0

謝謝!這將如何讓我的項目與最新的日期?如果我像上面那樣分組,我如何讓我的對象成爲我的初始類型?例如他們是類型MyClass,分組後,我仍然希望他們是類型MyClass,只是過濾... –

+0

如果您使用.orderby(cm => cm.Date).GroupBy(..),然後從結果中獲取第一組的第一個元素,這可能是您的最新元素。 –

+0

我有這樣的事情:var test = containerList.OrderByDescending(t => t.Date).GroupBy(g => new { g.MainDate,g.AnId,g.AnotherId})。 ToList();我現在面臨的問題是如何選擇每個項目的數據?即我想要每個分組的金額(不總結)... –

0

可以寫

.GroupBy(e=>new { MainDate = e.MainDate, Id = e.AnId})