如何在给定对象列表的情况下检查重复属性值并返回对象?

时间:2016-09-19 21:23:41

标签: c#

参考this post,原始海报需要查找列表中具有相同agent属性值的所有ID个对象。

 var duplicates = agents.GroupBy(a => a.ID).Where(a=>a.Count() > 1);

 foreach (var agent in duplicates)
 {
         Console.WriteLine(agent.Key.ToString());
 }

以上是给定的解决方案,但我无法弄清楚如何访问“重复”中的对象。如果我执行以下操作:

 var duplicates = agents.GroupBy(a => a.ID).Where(a=>a.Count() > 1);

 foreach (var agent in duplicates)
 {
         Console.WriteLine(agent.ID);
         agent.duplicate = true;

 }

我得到了

  

'IGrouping'不包含'ID'的定义,并且没有可以找到接受类型'IGrouping'的第一个参数的扩展方法'ID'(您是否缺少using指令或汇编引用?)

4 个答案:

答案 0 :(得分:0)

难道你不能只设置一个对象列表,循环遍历列表并在找到后删除重复项吗?

 List<agent> Agents = new List<agent>();

    foreach (Agent A in Agents)
    {
        foreach (Agent B in Agents)
        {
            if (A.ID == B.ID)
            {
            Agents.Remove(B)
            }
        }
    }

答案 1 :(得分:0)

由于错误明确表示......

  

'IGrouping'不包含'ID'的定义,也没有扩展名   方法'ID'接受'IGrouping'类型的第一个参数可能是   发现(您是否缺少using指令或程序集引用?)

您需要返回具有所需属性的类型。

 var duplicates = agents.GroupBy(a => a.ID).Where(a=>a.Count() > 1).Select(x => new { ID = x.Key});

答案 2 :(得分:0)

如果您只想要重复的ID,那么您可以将Select添加到链的末尾。

IEnumerable<int> duplicateIds = agents
    .GroupBy(a => a.ID)
    .Where(a => a.Count() > 1)
    .Select(a => a.Key);

答案 3 :(得分:0)

这就是我如何在没有分组的情况下做到这一点:

  List<Agent> duplicates = new HashSet<Agent>(agents.Where(c => agents.Count(x => x.ID == c.ID) > 1)).ToList();