使用这个输入...
Item1: Id=1, Name="name1"
Item2: Id=2, Name="name1"
Item3: Id=3, Name="name3"
Item4: Id=4, Name="Test2"
Item5: Id=5, Name="name1"
Item6: Id=6, Name="name3"
...这将获取所有出现次数大于一次的项目:
var result = items
.GroupBy(x => x.Name) // Group by name
.Where(g => g.Count() > 1) // Select only groups having duplicates
.SelectMany(g => g); // Ungroup (flatten) the groups
结果:
Item1: Id=1, Name="name1"
Item2: Id=2, Name="name1"
Item5: Id=5, Name="name1"
Item3: Id=3, Name="name3"
Item6: Id=6, Name="name3"
...这段代码获取所有出现两次或以上的项目并重新编号。
var result = items
.GroupBy(x => x.Name) // Group by name
.Where(g => g.Count() > 1) // Select only groups having duplicates
.SelectMany(g => g) // Ungroup (flatten) the groups
.Select((x, i) => new Item { Id = i + 1, Name = x.Name });
结果:
Item1: Id=1, Name="name1"
Item2: Id=2, Name="name1"
Item3: Id=3, Name="name1"
Item4: Id=4, Name="name3"
Item5: Id=5, Name="name3"
请注意,
Select
有一个载入函数可以提供基于零的索引。
Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>)
然而,您的示例输入过于简单,因此很难说在更复杂的情况下您期望发生什么。
如果您想要具有特定名称的条目:
string specificName = "name1";
var result = items
.Where(x => x.Name == specificName);
Item2: Id=2, Name="Test2"
吗? - Olivier Jacot-Descombes