面向對象編程中,根據公共屬性或鍵分組對象非常有用。本例探討如何使用LINQ(語言集成查詢)按PersonID分組對象,並獲取與每個人關聯的汽車列表。
假設我們有一個名為Person的類:
<code class="language-csharp">class Person { public int PersonID; public string Car; // 将car改为Car,符合C#命名规范 }</code>
我們還有一個Person對象的列表:
<code class="language-csharp">List<Person> persons;</code>
此列表可能包含多個具有相同PersonID的實例。例如:
<code class="language-csharp">persons = new List<Person>() { new Person { PersonID = 1, Car = "Ferrari" }, new Person { PersonID = 1, Car = "BMW" }, new Person { PersonID = 2, Car = "Audi" } };</code>
我們的目標是按PersonID分組這些對象,並獲取每個人擁有的所有汽車的列表。預期結果如下所示:
<code class="language-csharp">class Result { public int PersonID; public List<string> Cars; }</code>
分組後,我們將得到:
<code class="language-csharp">// 示例结果,实际结果由LINQ查询生成 var results = new List<Result>() { new Result { PersonID = 1, Cars = new List<string> { "Ferrari", "BMW" } }, new Result { PersonID = 2, Cars = new List<string> { "Audi" } } };</code>
為此,我們可以利用LINQ的GroupBy方法:
<code class="language-csharp">var results = from p in persons group p.Car by p.PersonID into g select new Result { PersonID = g.Key, Cars = g.ToList() };</code>
在GroupBy子句中,我們將PersonID指定為分組的鍵,並投影Car屬性。生成的序列將是一組與各自汽車列表關聯的鍵。
或者,可以使用Lookup字典來實現相同的結果:
<code class="language-csharp">var carsByPersonId = persons.ToLookup(p => p.PersonID, p => p.Car);</code>
這將創建一個字典,其中鍵是PersonID,值是每個人的汽車列表。要檢索特定人的汽車,可以使用:
<code class="language-csharp">// 这将返回一个空序列,对于查找中不存在的personId var carsForPerson = carsByPersonId[personId];</code>
通過使用這些技術,您可以使用C#和LINQ有效地按公共鍵分組對象,並以簡潔高效的方式檢索關聯數據的列表。 代碼示例已改進,更符合C#的編碼規範。
以上是如何使用c#中的linq通過鍵進行對象?的詳細內容。更多資訊請關注PHP中文網其他相關文章!