【问题标题】:How do I use LINQ to obtain a unique list of properties from a list of objects?如何使用 LINQ 从对象列表中获取唯一的属性列表?
【发布时间】: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 为您提供不同的MyClasss。用法:var distincts = list.DistinctBy(x => x.ID);

标签: linq class list c#-3.0 properties


【解决方案1】:
IEnumerable<int> ids = list.Select(x=>x.ID).Distinct();

【讨论】:

  • 哇!我以为这很简单……我只是想不出来。看来我得花更多时间熟悉 Linq。
【解决方案2】:

使用Distinct operator

var idList = yourList.Select(x=> x.ID).Distinct();

【讨论】:

  • (次要命名点;它不是 id 的“列表”——它是一个惰性求值的 IEnumerable——当然,除非你调用 .ToList() ;-p)跨度>
  • @Marc,一个简单的 2 行懒惰评估解释?请和谢谢:D
  • @masfenix Lazy eval 表示操作直到实际使用才完成。在这种情况下,在执行此答案中的语句时,不一定要选择 ID 并仅选择不同的 ID。它会在您真正开始遍历 idList 时完成,例如在 foreach 循环中。
【解决方案3】:

直接使用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

      【讨论】:

      • 不回答问题,即使回答了,也不会添加任何新内容。
      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多