利用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中文網其他相關文章!