我在尝试找出以下的LINQ查询时遇到了问题。
列是 MeterSerialNumber ,日期, DeviceType (M或C),然后是48个读数值列。
某些仪表将安装校正器。对于这些仪表,同一日期将有M(DeviceType)行和C行。我只需要这些米的C行。
e.g。
我需要一个查询来转换它:
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
我怀疑我可能需要嵌套查询,但却无法理解它!
答案 0 :(得分:1)
var query = sourceData.GroupBy(
x => new { x.MeterSerialNumber, x.Date },
(k, g) => g.OrderBy(x => x.DeviceType == 'C' ? 0 : 1).First());
答案 1 :(得分:1)
或试试这个:
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")));