首页 >后端开发 >C++ >如何使用LINQ的不同()方法根据特定属性获取唯一的对象?

如何使用LINQ的不同()方法根据特定属性获取唯一的对象?

Patricia Arquette
Patricia Arquette原创
2025-02-02 09:11:12371浏览

How Can I Use LINQ's Distinct() Method to Get Unique Objects Based on Specific Properties?

利用LINQ的Distinct()方法根据特定属性获取唯一对象

LINQ(语言集成查询)提供了一个强大的工具Distinct(),用于从集合中过滤和检索唯一元素。然而,当处理对象的属性而不是简单的基元列表时,使用Distinct()可能会比较棘手。

在对象属性上使用Distinct()

要在对象的属性上使用Distinct(),需要根据这些属性对对象进行分组,然后从每个组中选择一个唯一的代表。这可以使用LINQ的GroupBySelect方法来实现。

示例:基于Id属性的Distinct

考虑一个具有Id和Name属性的Person对象的列表:

<code>Person1:Id=1,Name="Test1"
Person2:Id=1,Name="Test1"
Person3:Id=2,Name="Test2"</code>

要根据Id属性获得唯一Person对象的列表,可以使用以下代码:

<code class="language-csharp">List<Person> distinctPeople = allPeople
  .GroupBy(p => p.Id)
  .Select(g => g.First())
  .ToList();</code>

这段代码首先按其Id属性对Person对象进行分组,创建一个组集,其中每个组包含具有相同Id的Person对象。然后使用Select方法从每个组中选择第一个Person对象,有效地根据Id属性提供了一个唯一的Person对象列表。

基于多个属性的Distinct

还可以通过定义复合键在多个属性上使用Distinct()。例如,要根据Id和FavoriteColor属性获得唯一的Person对象列表,可以使用以下代码:

<code class="language-csharp">List<Person> distinctPeople = allPeople
  .GroupBy(p => new { p.Id, p.FavoriteColor })
  .Select(g => g.First())
  .ToList();</code>

注意事项:

请注意,某些查询提供程序可能无法解析每个组必须至少包含一个元素,在这种情况下,FirstOrDefault可能是更合适的方法。此外,EF Core 6之前的版本需要稍微不同的方法。有关详细信息,请参阅提供的StackOverflow答案。(此处假设原文提到了StackOverflow答案,如果没有,则可以删除这句)

以上是如何使用LINQ的不同()方法根据特定属性获取唯一的对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn