c# - LINQ 条件分组

标签 c# linq-to-objects

我在尝试找出以下内容的 LINQ 查询时遇到问题。

列是MeterSerialNumberDateDeviceType(M或C),然后是48个读数值列。

有些仪表会安装校正器。对于这些仪表,同一日期将同时有一个 M (DeviceType) 行和一个 C 行。我只需要这些仪表的 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

我怀疑我可能需要嵌套查询,但就是想不通!

最佳答案

或者试试这个:

  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")));

关于c# - LINQ 条件分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3786723/

相关文章:

c# - 如何获得显示的第二种形式的同步上下文

c# - 当在 Controller 构造时不知道存储库时,如何在 Controller 中注入(inject)存储库?

c# - 当里面没有 DbSet<> 时如何使用 DbContext 进行查询?

c# - Linq 至少一个对象必须实现 IComparable

.net - LinQ 到对象 GroupBy() 按对象和 Sum() 按数量

.net - 不区分大小写的字符串与 linq-to-sql 和 linq-to-objects 进行比较

c# - 具有 IXmlSerializable 的自定义类因 OutOfMemoryException 而失败

c# - 为从 `this` 类型派生的类型提供扩展方法

c# - 使用 linq 从 select new 返回多行

c# - Linq GroupBy 和多列