本記事の概要
この記事では、LINQを使用して、 2つのシーケンスをグループ化し、それらを一緒に出力する方法について説明します。
公式サイト情報はコチラを参照してください。
2つのシーケンスをグループ化し、それらを一緒に出力する
C# LINQのGroupJoinメソッドは、2つのシーケンスをグループ化し、それらを一緒に出力するのに使用されます。1つ目のシーケンスは、グループ化の基礎となるキーを含み、2つ目のシーケンスは、グループ化される要素を含みます。
以下は、GroupJoinメソッドの使用例です。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Order { public int OrderId { get; set; } public string CustomerName { get; set; } } class OrderItem { public int OrderId { get; set; } public string ItemName { get; set; } public decimal Price { get; set; } } internal class Program { static void Main(string[] args) { var orders = new List { new Order { OrderId = 1, CustomerName = "ジョン" }, new Order { OrderId = 2, CustomerName = "アリス" }, new Order { OrderId = 3, CustomerName = "スティーブ" }, }; var orderItems = new List { new OrderItem { OrderId = 1, ItemName = "本", Price = 1000 }, new OrderItem { OrderId = 1, ItemName = "ペン", Price = 200 }, new OrderItem { OrderId = 2, ItemName = "バッグ", Price = 2000 }, new OrderItem { OrderId = 2, ItemName = "鉛筆", Price = 100 }, new OrderItem { OrderId = 3, ItemName = "ノート", Price = 500 }, new OrderItem { OrderId = 3, ItemName = "消しゴム", Price = 100 }, }; var query = orders.GroupJoin(orderItems, o => o.OrderId, oi => oi.OrderId, (o, oi) => new { OrderId = o.OrderId, CustomerName = o.CustomerName, OrderItems = oi.Select(i => new { ItemName = i.ItemName, Price = i.Price }) }); foreach (var order in query) { Console.WriteLine($"注文番号: {order.OrderId}"); Console.WriteLine($"顧客名: {order.CustomerName}"); Console.WriteLine("注文アイテム:"); foreach (var item in order.OrderItems) { Console.WriteLine($"\t{item.ItemName}, {item.Price:C}"); } Console.WriteLine(); } Console.ReadLine(); } } }
上記のコードでは、OrderクラスとOrderItemクラスが定義されており、ordersとorderItemsという2つのリストが作成されています。
GroupJoinメソッドを使用して、ordersとorderItemsをOrderIdで結合し、新しいオブジェクトのコレクションを作成しています。最後に、返されたオブジェクトのリストを反復処理して、それぞれのOrderオブジェクトに関連付けられたOrderItemオブジェクトを表示しています。
実行すると、以下のような結果が得られます。
注文番号: 1 顧客名: ジョン 注文アイテム: 本, ¥1,000 ペン, ¥200 注文番号: 2 顧客名: アリス 注文アイテム: バッグ, ¥2,000 鉛筆, ¥100 注文番号: 3 顧客名: スティーブ 注文アイテム: ノート, ¥500 消しゴム, ¥100
.NET クラス Tips 一覧
これまでに紹介した .NET Tips 一覧はこちら。
Please follow and like us:
コメント