首頁 >後端開發 >C++ >如何使用LINQ的不同()方法根據特定屬性獲取唯一的對象?

如何使用LINQ的不同()方法根據特定屬性獲取唯一的對象?

Patricia Arquette
Patricia Arquette原創
2025-02-02 09:11:12327瀏覽

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