C# 获取列表中的重复项并编辑项目

C# 获取列表中的重复项并编辑项目,c#,.net,arrays,winforms,list,C#,.net,Arrays,Winforms,List,我需要获取列表中已存在的任何项目,并编辑两个项目,以包含重复属性 我尝试通过执行以下操作来获取副本: var duplicates = LIST.Select((t, i) => new { Index = i, Text = t }).GroupBy(g => g.Text.PROPERTYTOSEARCGBY).Where(g => g.Count() > 1); 但是,当我需要获取两条记录的索引以便可以使用以下方法编辑它们时,这会返回重复的属性: LIST[ind

我需要获取列表中已存在的任何项目,并编辑两个项目,以包含重复属性

我尝试通过执行以下操作来获取副本:

var duplicates = LIST.Select((t, i) => new { Index = i, Text = t }).GroupBy(g => g.Text.PROPERTYTOSEARCGBY).Where(g => g.Count() > 1);
但是,当我需要获取两条记录的索引以便可以使用以下方法编辑它们时,这会返回重复的属性:

LIST[index1].FlaggedData = true;
LIST[index2].FlaggedData = true;
etc...

如何获取重复记录或多个记录的索引?

变量
duplicates
是一个可以迭代的
I分组。枚举中的每个元素都将是匿名类型,您将其定义为具有两个属性:
Index
Text

foreach (var grouping in duplicates)
{
    // This will contain the value that was grouped by:
    // - grouping.Key

    foreach (var pair in grouping)
    {
        // These properties are available
        //  - pair.Index
        //  - pair.Text

        // set the FlaggedData property
        pair.Text.FlaggedData = true;
    }
}
使用SelectMany

duplicates = LIST.Select((t, i) => new { Index = i, Text = t })
.GroupBy(g => g.Text.PROPERTYTOSEARCGBY)
.Where(g => g.Count() > 1)
.SelectMany(g => g, (g, x) => x.Index);

您已经有了正确的LINQ查询来执行所需的操作。似乎您更新
replicate
标志的代码不正确。您应该使用如下代码来更新Dupe标志

foreach (var group in duplicates) {
    foreach (var item in group) {
        LIST[item.Index].FlaggedData = true;
    }
}
或者一些更简洁的代码,比如

foreach (var item in duplicates.SelectMany(item => item))
    item.Text.FlaggedData = true;
你不需要索引。 只需按您所做的方式分组并自行选择项目即可

var duplicates = LIST.GroupBy(t => t.PROPERTYTOSEARCGBY)
                     .Where(g => g.Count() > 1)
                     .SelectMany(t=>t);

foreach (var item in duplicates)
{
    item.FlaggedData = true;
}
甚至更短:

LIST.GroupBy(t => t.PROPERTYTOSEARCGBY)
    .Where(g => g.Count() > 1)
    .SelectMany(t=>t)
    .ToList()
    .ForEach(t=>t.FlaggedData = true);

您已经做了您要求的-重复的
的每个项目都是
i分组
,即包含共享同一密钥的项目的可枚举项。谢谢。这是我对正确使用分组的误解。