我需要获取已存在的列表中的任何项目并编辑 BOTH 项目以包含重复的属性。
我试图通过以下方式获得重复:
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...
如何获取BOTH重复或多条记录的索引?
答案 0 :(得分:1)
变量duplicates
是可以迭代的IGrouping
。枚举中的每个元素都是您定义为具有2个属性的匿名类型: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;
}
}
答案 1 :(得分:1)
您已经拥有正确的LINQ查询来执行您想要的操作。似乎更新Duplicate
标志的代码不正确。您应该使用下面的代码来更新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;
答案 2 :(得分:0)
使用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);
答案 3 :(得分:0)
您不需要索引。 它足以像您一样进行分组并自行选择项目。
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);