gpt4 book ai didi

c# - 使用 LINQ 获取具有相同值属性的所有对象?

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:29 25 4
gpt4 key购买 nike

我有一个这样的项目列表:

Item1: Id=1, Name="name1"
Item2: Id=2, Name="name1"
Item3: Id=3, Name="Test2"

我想要执行的是得到这样的简化列表:

Item1: Id=1, Name="name1"
Item2: Id=2, Name="name1"

所以基本上我想要具有相同给定属性值的项目。因此所有具有相同给定属性值的项目。

我试图对它们进行分组,但我不知道下一步该怎么做。

items.OrderBy(x => x.Name);

编辑解释。

看来我没听懂问题。答案是预期的,但这里已经有一个解决方案:

Right answer!

最佳答案

使用这个输入...

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);

关于c# - 使用 LINQ 获取具有相同值属性的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com