C# には join ステートメントがあり、2つのコレクションを結合できるのだが、結合のためのキーが一つしか指定できない。どうしたら複数のキーを使って結合できるのか?
using System;
using System.Linq;
class Data
{
public int X { get; set; }
public int Y { get; set; }
public override string ToString()
{
return String.Format("X = {0}, Y = {1}", X, Y);
}
}
class Program
{
static void Main()
{
var data1 = new[] {
new Data { X = 1, Y = 1 },
new Data { X = 2, Y = 2 },
new Data { X = 3, Y = 3 },
new Data { X = 4, Y = 4 },
new Data { X = 5, Y = 5 },
};
var data2 = new[] {
new Data { X = 1, Y = 5 },
new Data { X = 2, Y = 4 },
new Data { X = 3, Y = 3 },
new Data { X = 4, Y = 2 },
new Data { X = 5, Y = 1 },
};
Console.WriteLine("単一の値で join");
var query1 = from d1 in data1
join d2 in data2 on d1.X equals d2.X
select d1;
query1.ToList().ForEach(Console.WriteLine);
Console.WriteLine("複数の値で join");
var query2 = from d1 in data1
join d2 in data2 on new { d1.X, d1.Y } equals new { d2.X, d2.Y }
select d1;
query2.ToList().ForEach(Console.WriteLine);
}
}