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

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

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

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

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

【问题讨论】:

  • 插入新项目时要检查吗?
  • 没有。我想查看警报列表。
  • 在所有三个答案下方,您评论说您想要一个重复列表,但我在问题中看不到这一点。有点混乱...
  • 感谢您指出本特。我已经更正了。

标签: c# linq linq-to-objects


【解决方案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 首先回答。 :)
猜你喜欢
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
相关资源
最近更新 更多