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

C# Linq以确保没有两个对象具有相同的属性值,c#,linq,linq-to-objects,C#,Linq,Linq To Objects,我有一个叫做Alarm的类,它有一个叫做Description的属性 public class Alarm { public string Description { get; set; } } 在警报列表中,我必须确保列表中没有两个警报具有相同的描述 public class Alarm { public string Description { get; set; } } 我想使用linq执行此检查,并获取具有重复描述的报警列表var distinctAlarms=ala

我有一个叫做Alarm的类,它有一个叫做Description的属性

public class Alarm
{
    public string Description { get; set; }
}
在警报列表中,我必须确保列表中没有两个警报具有相同的描述

public class Alarm
{
    public string Description { get; set; }
}

我想使用linq执行此检查,并获取具有重复描述的报警列表
var distinctAlarms=alarms.GroupBy(a=>a.description)。选择(I=>I.First()).ToList()


这应该可以做到

var distinctAlarms=alarms.GroupBy(a=>a.Description)。选择(i=>i.First()).ToList()

var dups = Alarms
  .GroupBy(a=>a.Description)
  .Where(a=>a.Count()>1)
  .SelectMany(a=>a);
那应该可以

var dups = Alarms
  .GroupBy(a=>a.Description)
  .Where(a=>a.Count()>1)
  .SelectMany(a=>a);


如果您不想找到哪些报警被复制,您也可以这样做:

if (list.Select(alarm => alarm.Description).Distinct().Count() != list.Count)
{
    // Has duplicate
}

如果您不想找到哪些报警被复制,您也可以这样做:

if (list.Select(alarm => alarm.Description).Distinct().Count() != list.Count)
{
    // Has duplicate
}


你想在插入新项目时检查它吗?不。我想检查报警列表。在所有三个答案下面,你评论说你想要一个重复列表,但我在问题中没有看到。有点困惑…谢谢你指出它。我已经做了更正。你想在插入新项目时检查它吗?不。我想检查警报列表。在所有三个答案下面,你评论说你想要一个重复列表,但我在问题中没有看到。有点困惑…谢谢你指出它。我已经改正了,这里少了一些东西。这只会返回不同的警报。如果有重复的就不用了。谢谢格兰特。但是我想要一个查询来查找重复的而不是不同的报警。这里缺少一些东西。这只会返回不同的警报。如果有重复的就不用了。谢谢格兰特。但是我想要一个查询来找到重复的而不是不同的报警。很好的答案。我想要的是一份副本清单。谢谢,罗伯特,回答得好。我想要的是一份副本清单。谢谢,罗伯特,很好的逻辑。但是我想要一份重复项目的清单。是的。只是把它放在这里作为一种选择,因为@Robert McKee首先回答好逻辑,伊安。但是我想要一份重复项目的清单。是的。只是把它放在这里作为一种选择,因为@Robert McKee首先回答