利用LINQ的Distinct()方法根据特定属性获取唯一对象
LINQ(语言集成查询)提供了一个强大的工具Distinct()
,用于从集合中过滤和检索唯一元素。然而,当处理对象的属性而不是简单的基元列表时,使用Distinct()
可能会比较棘手。
在对象属性上使用Distinct()
要在对象的属性上使用Distinct()
,需要根据这些属性对对象进行分组,然后从每个组中选择一个唯一的代表。这可以使用LINQ的GroupBy
和Select
方法来实现。
示例:基于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中文网其他相关文章!