首頁 > 後端開發 > C++ > 如何使用c#中的linq通過鍵進行對象?

如何使用c#中的linq通過鍵進行對象?

Mary-Kate Olsen
發布: 2025-02-02 00:21:10
原創
775 人瀏覽過

How Can I Group Objects by a Key Using LINQ in C#?

使用LINQ按鍵分組對象

面向對象編程中,根據公共屬性或鍵分組對象非常有用。本例探討如何使用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板