2016-09-19 46 views
0

参考this post,原始海报需要查找具有相同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”,没有扩展方法“ID”接受型“IGrouping”的第一个参数可以定义被发现(你是否缺少使用指令或程序集引用?)

+1

的可能的复制[如何从IGrouping获取值(http://stackoverflow.com/questions/8521025/how igrouping的值) –

+0

可能你会在这里找到你的答案:http://stackoverflow.com/a/16075683/1132334 – dlatikay

回答

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) 
      } 
     } 
    } 
+0

我其实不想删除它们,我想更新一个属性这些记录。 – MrDysprosium

0

随着误差清楚地说...

“IGrouping”不包含关于“ID”和没有扩展 方法“ID”接受型的第一参数“IGrouping”的定义可以 (是否缺少using指令或程序集引用?)

你需要返回拥有你想要的属性类型。

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

如果你只是想要重复的ID,那么你可以添加一个选择到链的末尾。

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

我实际上想要具有重复ID的对象。 – MrDysprosium

0

这是我怎么会做没有组由:

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