Linq 确保没有两个对象具有相同的属性值

Posted

技术标签:

【中文标题】Linq 确保没有两个对象具有相同的属性值【英文标题】:Linq to make sure that no two objects have same property value 【发布时间】:2017-11-09 14:22:24 【问题描述】:

我有一个名为 Alarm 的类,它有一个名为 Description 的属性。

public class Alarm

    public string Description  get; set; 

在警报列表中,我必须确保列表中没有两个警报具有相同的描述。

我想使用 linq 进行此检查并获取具有重复描述的警报列表

【问题讨论】:

插入新项目时要检查吗? 没有。我想查看警报列表。 在所有三个答案下方,您评论说您想要一个重复列表,但我在问题中看不到这一点。有点混乱... 感谢您指出本特。我已经更正了。 【参考方案1】:
var dups = Alarms
  .GroupBy(a=>a.Description)
  .Where(a=>a.Count()>1)
  .SelectMany(a=>a);

if (Alarms
  .GroupBy(a=>a.Description)
  .Where(a=>a.Count()>1)
  .Any())

  throw new Exception("You got dups!");

【讨论】:

很好的答案。重复列表是我想要的。谢谢罗伯特。【参考方案2】:

var distinctAlarms = alarms.GroupBy(a => a.Description).Select(i => i.First()) .ToList();

应该这样做

【讨论】:

这里缺少一些东西。这只会返回不同的警报。如果有重复则不是。 感谢格兰特。但我想要一个查询来查找重复而不是不同的警报。【参考方案3】:

如果您不想查找重复的警报,您也可以这样做:

if (list.Select(alarm => alarm.Description).Distinct().Count() != list.Count)

    // Has duplicate

【讨论】:

很好的逻辑 IIian。但我想要一个重复项目的列表。 是的。只是把它放在这里作为替代,因为@Robert McKee 首先回答。 :)

以上是关于Linq 确保没有两个对象具有相同的属性值的主要内容,如果未能解决你的问题,请参考以下文章

合并具有相同属性值的json对象c#

使用 LINQ 将具有相同值的多行列表连接成单行

如何确保两行不具有相同的值[重复]

我可以有两个具有相同属性名称的对象吗? [复制]

确保所有模块具有相同参数的模式?

如何比较两个没有顺序的具有相同属性的JSON?