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 确保没有两个对象具有相同的属性值的主要内容,如果未能解决你的问题,请参考以下文章