高效利用LINQ GroupBy操作符按共享屬性值聚合對象
面向對象編程中,多個對象共享特定屬性的情況很常見。例如,“Person”類包含“ID”和擁有的汽車列表。為了清晰高效地聚合與每個唯一ID關聯的汽車,我們可以使用LINQ的“GroupBy”操作符。
LINQ GroupBy操作符
GroupBy操作符根據指定鍵的值將對象序列劃分為較小的組。在我們的“Person”類中,我們可以使用“PersonId”屬性作為鍵來分組對象。這將有效地創建一個類似字典的結構,其中鍵是唯一的“PersonId”值,值是與每個“PersonId”關聯的“汽車”值的列表。
代碼示例
為了按“PersonId”分組“Person”對象並檢索相應的汽車列表,我們可以使用以下LINQ查詢表達式:
<code class="language-csharp">var results = from p in persons group p.car by p.PersonId into g select new { PersonId = g.Key, Cars = g.ToList() };</code>
或者,我們可以使用非查詢表達式實現相同的結果:
<code class="language-csharp">var results = persons.GroupBy( p => p.PersonId, p => p.car, (key, g) => new { PersonId = key, Cars = g.ToList() });</code>
結果
“results”變量現在將包含一個匿名對象的集合,該集合具有兩個屬性:
通過迭代“results”集合,我們可以獲得每個唯一“PersonId”的所需信息。
其他考慮因素
為了與.NET命名約定保持一致,建議在使用屬性名稱時使用“PersonId”而不是“PersonID”。
GroupBy與Lookup的比較
或者,可以使用“Lookup”方法代替“GroupBy”來實現類似的結果。 “Lookup”有效地創建了一個類似字典的結構,其中鍵是唯一的“PersonId”值,值是與每個“PersonId”關聯的“汽車”值的集合。要使用“Lookup”檢索特定人的汽車,我們可以使用以下語法:
<code class="language-csharp">var carsForPerson = carsByPersonId[personId];</code>
以上是LINQ的GroupBy操作員如何根據共享屬性值有效地匯總對象?的詳細內容。更多資訊請關注PHP中文網其他相關文章!