Linq集团提问

时间:2010-10-27 16:27:06

标签: linq group-by

我有一个包含列id,myname,eventime,ceasetime的数据源。 我需要找出给定Key的重复日期范围。我试着用 -

(from data1 in myDatasource                                   
from data2 in myDatasource
where data1.SeqId != data2.SeqId 
&& data1.myname ==data2.myname
where data1.Event_Time <=data2.Cease_Time 
&& data1.Cease_Time > data2.Event_Time
select data1).Distinct();

但是这太慢了,我认为每一行都与其余所有行进行比较。 我想要做的是先按myName分组,然后应用where条件。问题是where条件可以返回多行,任何人都可以建议

问候

1 个答案:

答案 0 :(得分:2)

var lookup = from data1 in myDataSource
group by myDataSource.myName into g
where g.Count() > 1
select g;

这应该这样做。它将返回按名称分组的对象的查找,其中每个名称都有多个元素。如果您想要将其展平,请选择lookup并在其上调用SelectMany:

var flatEnumerable = lookup.SelectMany(g=>g); //ToList(), ToArray(), etc will get you a concrete collection