本記事の概要
この記事では、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:

コメント