2016-09-19 50 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();