c# - 使用 LINQ 获取具有相同值属性的所有对象?
问题描述
我有一个这样的项目列表:
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);
编辑解释。
似乎我不明白这个问题。答案是预期的,但这里已经有一个解决方案:
解决方案
使用此输入...
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);
推荐阅读
- python - sys.argv 没有输出
- python - 为什么 PyQt5 导入显示有关 windows 和蓝牙的错误?
- powershell - (Measure-Object -sum).Sum 的替代方案
- php - 如何在 Laravel 刀片模板文件中显示 Blob 图像?
- javascript - 混淆逻辑运算 if(null)
- java - 春天MVC。Pageable 实际上是如何工作的?
- python - 无法使用 Selenium WebDriver 和 Python 访问特定网站上的文本框和按钮
- kubernetes - heapster 在 kubernetes 中自动缩放 Pod
- c# - 如何匹配字符串中任意字符的奇数个?
- python - 关于列表元素 id 的混淆