2011-12-19 60 views
3

選擇所需的行我有這樣如何在分組結果使用C#LINQ

ID EndDate 
1 2/11/2010 
1 3/14/2011 
2 5/3/2011 
2 12/1/2011 
3 4/5/2010 

客戶表我想借此最大日期的每一行對應一個ID組 結果是這樣的:

ID EndDate 
1 3/14/2011 
2 12/1/2011 
3 4/5/2010 

如何在c#中使用一種流暢的語法(不帶循環或第二條語句)來獲取結果?

Customers.GroupBy(c => c.ID).....//How do I proceed? 
+0

對不起,我不知道怎麼在這裏格式化客戶表以表格形式...有人請幫助。 – Meidi 2011-12-19 18:34:24

回答

5

您可以使用:

var results = Customers.GroupBy(c => c.ID) 
         .Select(
          g => g.OrderByDescending(c => c.EndDate).First()); 
+0

如果表格真正只包含兩列,那麼您可以使用Max而不是orderby和First ...請參閱下面的答案。 – 2011-12-19 18:48:47

+0

@ach Max將返回DateTime,而不是Customer對象。在這種情況下你不能使用Max。你可以用MoreLinq的MaxBy或類似的工具,但不能用BCL類。請參閱:http://code.google.com/p/morelinq/source/browse/trunk/MoreLinq/MaxBy.cs – 2011-12-19 18:52:20