【问题标题】:Group by on multiple columns and trace values which are not distinct对多个列进行分组并跟踪不明确的值
【发布时间】:2017-10-07 21:52:03
【问题描述】:

我有一个集合,其中包含类似的项目 InstId、PulseID 和 SheetID 位于其他项目之上。我想检查集合中的这些值(作为组合)是否不同,如果不是,我想向它们输出一个简单的跟踪消息“不唯一:InstId、PulseID 和 SheetID。

例如,

InstId  |   PulseID     |   SheetID     |
-----------------------------------------
    1   |   1           |   99          |
    1   |   1           |   98          |
    1   |   1           |   97          |
    2   |   1           |   99          |
    2   |   1           |   98          |
    3   |   1           |   97          |
    2   |   1           |   99          |
    2   |   1           |   95          |
    3   |   1           |   93          |


    I would like a trace message which will output the duplicatite like 
    InstId:2, PulseID: 1, SheetID: 99

我正在查看此链接,这似乎是有道理的,但我如何获得那些不是唯一的。 C# Linq Group By on multiple columns

【问题讨论】:

  • 只是告诉我们你尝试了什么
  • 你能给出一个(简短的)数据示例和预期结果吗?
  • 我已更新我的问题以显示我的收藏和我正在寻找的结果。

标签: c# list linq object collections


【解决方案1】:

你在寻找这样的东西吗?

var result = IQueryableSource.GroupBy(x=>new {A=x.A, B=x.B, C=x.C}).Where(x=>x.Count()>1).Select(x=>x.Key);

【讨论】:

  • 我是 Linq 的新手,我不太明白什么是 x.key。我将尝试在我的收藏中实现它,看看它是否有效。干杯。
  • elements.GroupBy(element => new { A = element.A, B = element.B }).Where(group => group.Count() > 1).Select(group => group.Key) 会更具可读性。然后(至少更清楚一点)group.Key 是您分组的匿名对象 { A = element.A, B = element.B }
  • 这工作得很好。我在使用之前将其转换为列表,以便循环浏览。解决了。谢谢。
【解决方案2】:

鉴于链接使用查询语法,如何

var ans = from item in CollectionOfItems 
          group item by new { item.InstId, item.PulseID, item.SheetID } into ig
          where ig.Count() > 1
          select ig.Key;

如果您想要原始收藏品,也可以select ig.First()

【讨论】:

  • 谢谢。更简单的版本是@DarkSquirrel42 答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
相关资源
最近更新 更多