如何使用Linq从对象列表中获取唯一的属性列表?

mez*_*oid 164 linq properties class list c#-3.0

我正在尝试使用Linq返回一个id列表,给出id为属性的对象列表.我希望能够在不循环遍历每个对象并拉出我找到的唯一ID的情况下执行此操作.

我有一个MyClass类型的对象列表,这个类的一个属性是一个ID.

public class MyClass
{
  public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是写一个Linq查询来返回我的那些ID列表

IList<MyClass>如果它返回一个IEnumerable<int>id ,我该怎么做呢?

我确信必须能够使用Linq在一行或两行中完成它,而不是循环遍历MyClass列表中的每个项目并将唯一值添加到列表中.

任何帮助创建一个优雅的解决方案将非常感谢!

Mar*_*ell 306

IEnumerable<int> ids = list.Select(x=>x.ID).Distinct();
Run Code Online (Sandbox Code Playgroud)

  • 哇!我以为这很简单……我就是想不到。看来我得花更多时间来熟悉 Linq。 (2认同)

CMS*_*CMS 29

使用Distinct运算符:

var idList = yourList.Select(x=> x.ID).Distinct();
Run Code Online (Sandbox Code Playgroud)

  • (次要命名点;它不是ids的"列表" - 它是一个懒惰评估的IEnumerable <int> - 除非你调用.ToList(),当然;-p) (5认同)
  • @masfenix Lazy eval表示在实际使用之前不会执行操作.在这种情况下,当执行该答案中的语句时,不一定要选择ID并仅选择不同的ID.当你真正开始遍历idList时,例如在foreach循环中,它将完成. (2认同)

Dan*_*ana 13

使用直Linq,Distinct()扩展名为:

var idList = (from x in yourList select x.ID).Distinct();
Run Code Online (Sandbox Code Playgroud)