人と呼ばれるクラスがあると仮定します:
人物のリストもあります:
<code class="language-csharp">class Person { public int PersonID; public string Car; // 将car改为Car,符合C#命名规范 }</code>
このリストには、同じペンペルセットを持つ複数のインスタンスが含まれる場合があります。たとえば、
<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>
グループの後、
<code class="language-csharp">class Result { public int PersonID; public List<string> Cars; }</code>を取得します
このため、LINQのGroupByメソッドを使用できます。
<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>
Groupby句では、PersonIDをグループキーとして指定し、自動車の財産を投影しました。生成されたシーケンスは、それぞれの車に関連付けられたキーのセットになります。
<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>または、Lookup Dictionaryを使用して同じ結果を達成できます。
これにより、キーはandicidであり、値は全員の車リストです。特定の車を検索するには、次のことを使用できます。
これらのテクノロジーを使用することにより、C#とLINQを使用して、パブリックボンディングオブジェクトを効果的に追跡し、関連データのリストをシンプルで効率的な方法で取得できます。 コードの例が改善されましたが、これはC#のコーディング仕様に沿ったものです。
<code class="language-csharp">var carsByPersonId = persons.ToLookup(p => p.PersonID, p => p.Car);</code>
以上がC#でLINQを使用してキーでオブジェクトをグループ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。