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

C# 如何在给定对象列表的情况下检查重复的属性值并返回对象?,c#,C#,参考,原始海报需要在列表中查找具有相同ID属性值的所有agent对象 var duplicates = agents.GroupBy(a => a.ID).Where(a=>a.Count() > 1); foreach (var agent in duplicates) { Console.WriteLine(agent.Key.ToString()); } 以上是给定的解决方案,但我不知道如何访问“副本”中的对象。如果我这样做: var du

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

 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指令或程序集引用?)


难道你们就不能建立一个对象列表,在列表上循环并在找到重复项后删除吗

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

    foreach (Agent A in Agents)
    {
        foreach (Agent B in Agents)
        {
            if (A.ID == B.ID)
            {
            Agents.Remove(B)
            }
        }
    }
List agent=new List();
foreach(代理中的代理A)
{
foreach(代理中的代理B)
{
如果(A.ID==B.ID)
{
代理。删除(B)
}
}
}

错误清楚地表明

“iGroup”不包含“ID”的定义,也不包含扩展名 接受类型为“IGrouping”的第一个参数的方法“ID”可以是 找到(是否缺少using指令或程序集引用?)

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

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

如果您只需要重复的ID,那么可以在链的末尾添加一个Select

IEnumerable<int> duplicateIds = agents
    .GroupBy(a => a.ID)
    .Where(a => a.Count() > 1)
    .Select(a => a.Key);
IEnumerable DuplicateID=代理
.GroupBy(a=>a.ID)
.Where(a=>a.Count()>1)
.选择(a=>a.键);

如果没有分组,我会这样做:

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

您可能会在这里找到答案:我实际上想要具有重复ID的对象。我实际上不想删除它们,我想更新这些记录的属性。