LINQ условная группировка - PullRequest
       2

LINQ условная группировка

2 голосов
/ 24 сентября 2010

У меня проблема с попыткой определить запрос LINQ для следующего.

Это столбцы MeterSerialNumber , Дата , Тип устройства (М или С), а затем 48 столбцов значений чтения.

На некоторых счетчиках будет установлен корректор. Для этих счетчиков будет одновременно строка M (DeviceType) и строка C на одну и ту же дату. Мне нужны только строки С для этих метров.

, например

Мне нужен запрос для преобразования этого:

MeterSerialNumber,Date,DeviceType,Reading1,Reading2,etc
8017680S,19/08/2010,M,12,23,etc 
4504761S,19/08/2010,M,12,23,etc
4504761S,19/08/2010,C,12,23,etc
08000963,19/08/2010,M,12,23,etc

К этому:

MeterSerialNumber,Date,DeviceType,Reading1,Reading2,etc
8017680S,19/08/2010,M,12,23,etc
4504761S,19/08/2010,C,12,23,etc
08000963,19/08/2010,M,12,23,etc

Я подозреваю, что мне могут понадобиться вложенные запросы, но я просто не могу разобраться с этим!

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Или попробуйте это:

  var group = meters
    .Where(m => m.DeviceType == "M" && !meters.Any(m2 => m2.MeterSerialNumber == m.MeterSerialNumber && m2.DeviceType == "C"))
    .Union(meters
      .Where(m => m.DeviceType == "C" && meters.Any(m2 => m2.MeterSerialNumber == m.MeterSerialNumber && m2.DeviceType == "M")));
1 голос
/ 24 сентября 2010
var query = sourceData.GroupBy(
                x => new { x.MeterSerialNumber, x.Date },
                (k, g) => g.OrderBy(x => x.DeviceType == 'C' ? 0 : 1).First());
...