2017-04-04 68 views
1

我有一個表是這樣的:LINQ有多個選擇和組由多個選擇

First Field | Second Field | Third Field | Fourth Field 
------------+--------------+----------------+---------------- 
5  |  aaaa  |  47   |  abc 
5  |  aaaa  |  57   |  def 
5  |  aaaa  |  63   |  xyz 
5  |  bbbb  |  39   |  www 
5  |  bbbb  |  37   |  lol 
5  |  cccc  |  84   |  yuy 

我希望將這個表由第一和第二場,但我想只能用最大的行第三個領域。

我怎樣才能通過LINQ在c#中做到這一點?

var curi = (from row in customClassList.AsEnumerable() 
        group row by new 
        { 
         First = row.FirstField.ToString(), 
         Second = row.SecondSield.ToString(), 
        } into grp 
        select new FieldsClass 
        { 
         First = grp.Key.First, 
         Second = grp.Key.Second, 
         Third = grp.Select(p => p.ThirdField).Max().ToShort(), 
         Fourth = grp.Key.Fourth 
        }).ToList(); 

這是我期望的結果:

First Field | Second Field | Third Field | Fourth Field 
------------+--------------+----------------+---------------- 
5  |  aaaa  |  63   |  xyz 
5  |  bbbb  |  39   |  www 
5  |  cccc  |  84   |  yuy 
+0

那麼你所擁有的代碼會發生什麼?什麼東西?沒有?錯誤? –

+0

你的預期結果究竟是什麼? – PtrBld

+0

我試了很多查詢,但我不能得到我想要的。我認爲這個代碼是最近的代碼,但它不是建設,我不能嘗試它 – Curious

回答

8

如何

var result = customClassList.GroupBy(x => new {x.FirstField, x.SecondField}) 
          .Select(x => x.OrderByDescending(y => y.ThirdField).First()); 
+0

正是:)謝謝@fubo – Curious