参考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指令或汇编引用?)
答案 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();