2011-03-03 56 views
0

我有一个集合中的下列对象:Linq的分组问题

交易:
TYPE = “微件”
日期= “3/1/2011”
NAME = “富”

交易:
TYPE = “微件”
日期= “2011/3/4”
名称=“巴R”

交易:
TYPE = “小工具”
日期= “2011/3/2”
NAME = “巴兹”

交易:
TYPE = “小玩意儿”
日期= “3/1/2011”
名称= “谁”

交易:
TYPE = “小玩意儿”
日期= “2011/3/2”
名称= “什么”

交易:
TYPE = “小玩意儿”
日期=“3/6/2011“
Name =”When“

我想结束以下,按类型分组。如果有多个,则按日期按时间顺序返回第一个。

交易:
TYPE = “微件”
日期= “3/1/2011”
NAME = “富”

交易:
TYPE = “小工具”
Date =“3/2/2011”
Name =“Baz”

交易:
TYPE = “小玩意儿”
日期= “3/1/2011”
名称= “谁”

回答

3

用流利的形式:

var groups = transactions.GroupBy(t => t.Type) 
         .Select(g => g.OrderBy(t => t.Date).First()); 

在查询窗体:

var groups = from t in transactions 
      group t by t.Type into g 
      select g.OrderBy(t => t.Date).First(); 
1

这应该工作:

var groupedTransactions = transactions.GroupBy(t => t.Type) 
             .Select(g => g.OrderBy(t => t.Date).FirstOrDefault()); 
+0

是FirstOrDefault有必要吗?如果它是分组的,那么不管日期如何,除非日期变量是可空的? – 2011-03-04 14:20:35

+0

@Mike C:'FirstOrDefault'是不必要的,'First'将具有相同的语义。问题不在于是否注意“日期”是可以空的,而是一个组是否可以为空(在这种情况下,不会有“第一个”)。但是一个组不能是空的,所以“OrDefault”永远不会发生,“First”就足够了。 – jason 2011-03-04 14:54:17

+0

@Jason:啊,是的。 Woops! – 2011-03-04 14:57:00

1

var q = 
from t in MyTypes 
group t by t.Type into g 
select g.OrderBy(t => t.Date).First();