Запрос Linq с группой

RowNum IMAGEID SCANEDATE COUNT
1 10000131 2012-07-04 00:00:00.000 1
2 10002626 2012-08-03 00:00:00.000 1
3 10003348 2012-09-06 00:00:00.000 1
4 10003589 2012-09-15 00:00:00.000 8
5 10003590 2012-05-15 00:00:00.000 8
6 10003591 2012-04-15 00:00:00.000 8
7 10003592 2012-03-15 00:00:00.000 8
8 10003595 2012-02-15 00:00:00.000 8
9 10003596 2012-09-15 00:00:00.000 8
10 10003598 2012-09-15 00:00:00.000 8
11 10003599 2012-09-15 00:00:00.000 8

У меня выше datatable, на котором мне нужно применить запрос linq для получения результат следующим образом

1) Все идентификаторы изображений, имеющие одну и ту же дату, должны быть указаны в одной ячейке (, разделены), а в графе счетчика должно быть количество каждой даты соответствующий нет. идентификаторов изображений

Scan Date Image ID Count
 11/27/2007 1001529,1001530,1001531,1001532,1001533,1001534,1001537,1001538,1001539,1001540,1001542 11
 11/20/2008 1002501,1002502,1002503,1002504,1002505,1002506,1002507,1002508,1002509,1002510,1002511,1002512,1002513,1002514,1002515,1002516,1002517,1002518,1002519,1002520, 20
 7/5/2011 1015237,1015238 2
 7/6/2011 1015248,1015249,1015259,1015260,1015286,1015287,1015288,1015289,1015290,1015291,1015292,1015293,1015294,1015295,1015296,1015297,1015347,1015348,1015358,1015359, 32
 1015370,1015371,1015381,1015382,1015396,1015397,1015410,1015411,1015412,1015413,1015429,1015430
 7/7/2011 1015444,1015445 2

Пожалуйста, предоставьте мне запрос на выполнение вышеуказанного.

2 ответа

Группируйте строки таблицы с помощью поля SCANEDATE. Затем проецируйте каждую группу строк, выбрав дату проверки (ключ группы), соединяя все идентификаторы изображений в строку и получая количество строк в группе:

table.AsEnumerable()
 .GroupBy(r => r.Field<datetime>("SCANEDATE"))
 .Select(g => new {
 ScanDate = g.Key,
 Ids = String.Join(",", g.Select(r => r.Field<int>("IIMAGEID"))),
 Count = g.Count()
 });
</int></datetime>


var results = from p in tabel
 group p.IMAGEID by p.SCANEDATE into g
 select new { SCANEDATE = g.Key, IMAGEID = g.ToList() };

Или как выражение без запроса:

var results = tabel.GroupBy(p => p.SCANEDATE , p => p.IMAGEID ,
 (key, g) => new { SCANEDATE = key, IMAGEID = g.ToList() });

В основном содержимое группы (при представлении как IEnumerable) представляет собой последовательность любых значений в проекции (p.car в этом случае), присутствующих для данного ключа.

licensed under cc by-sa 3.0 with attribution.