如何使用 LINQ 从对象列表中获取唯一的属性列表?
Posted
技术标签:
【中文标题】如何使用 LINQ 从对象列表中获取唯一的属性列表?【英文标题】:How do I use LINQ to obtain a unique list of properties from a list of objects? 【发布时间】:2021-05-02 19:22:27 【问题描述】:我正在尝试使用 LINQ 返回一个 id 列表,给定一个对象列表,其中 id 是一个属性。我希望能够做到这一点,而无需遍历每个对象并提取我找到的唯一 ID。
我有一个 MyClass 类型的对象列表,该类的属性之一是 ID。
public class MyClass
public int ID get; set;
我想编写一个 LINQ 查询来返回这些 Id 的列表。
如果给定一个IList<MyClass>
,它会返回一个IEnumerable<int>
的ID,我该怎么做?
我确信一定可以使用 LINQ 在一两行中完成,而不是遍历 MyClass 列表中的每个项目并将唯一值添加到列表中。
【问题讨论】:
另外请注意,您在MoreLinq 中有DistinctBy
,这将根据ID
为您提供不同的MyClass
s。用法:var distincts = list.DistinctBy(x => x.ID);
【参考方案1】:
IEnumerable<int> ids = list.Select(x=>x.ID).Distinct();
【讨论】:
哇!我以为这很简单……我只是想不出来。看来我得花更多时间熟悉 Linq。【参考方案2】:使用Distinct operator:
var idList = yourList.Select(x=> x.ID).Distinct();
【讨论】:
(次要命名点;它不是 id 的“列表”——它是一个惰性求值的 IEnumerable直接使用LINQ,扩展名为Distinct()
:
var idList = (from x in yourList select x.ID).Distinct();
【讨论】:
【参考方案4】:当采用Distinct时,我们也必须转换成IEnumerable。如果列表是
IEnumerable<T> ids = list.Select(x => x).Distinct();
【讨论】:
【参考方案5】:int[] numbers = 1,2,3,4,5,3,6,4,7,8,9,1,0 ;
var nonRepeats = (from n in numbers select n).Distinct();
foreach (var d in nonRepeats)
Response.Write(d);
输出
1234567890
【讨论】:
不回答问题,即使回答了,也不会添加任何新内容。以上是关于如何使用 LINQ 从对象列表中获取唯一的属性列表?的主要内容,如果未能解决你的问题,请参考以下文章
使用 LINQ 获取两个比较列表的结果并根据结果更改列表中的属性