Linq группа по вопросу - PullRequest
       24

Linq группа по вопросу

2 голосов
/ 27 октября 2010

У меня есть источник данных с столбцами id, myname, eventime, ceasetime.Мне нужно выяснить повторяющиеся диапазоны дат для данного ключа.Я пытался использовать -

(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.Дело в том, что условие может возвращать несколько строк. Кто-нибудь может предложить как-нибудь

regards

1 Ответ

2 голосов
/ 27 октября 2010
var lookup = from data1 in myDataSource
group by myDataSource.myName into g
where g.Count() > 1
select g;

Это должно сделать это. Он вернет Lookup ваших объектов, сгруппированных по их имени, где для каждого имени есть более одного элемента. Если вы хотите сгладить это обратно, возьмите lookup и вызовите на нем SelectMany:

var flatEnumerable = lookup.SelectMany(g=>g); //ToList(), ToArray(), etc will get you a concrete collection
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...