投稿数 - 437, コメント - 4644, トラックバック - 156

LINQ Tips - 複数のキーを使って join

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);
    }
}

 join_run

投稿日時 : 2008年8月31日 12:31

フィードバック

# re: LINQ Tips - 複数のキーを使って join

ほー。
どうも equals での比較には IEqualityComparer が使われるようですな。
2008/08/31 17:44 | シャノン

# re: LINQ Tips - 複数のキーを使って join

なーんも考えんと普通に Equals 使っとるんかと思ってた。
2008/09/02 0:21 | 囚人

# http://lvshoulderbagbuy.sinaapp.com/

?婁笘?便伀?倞????傘?????亜?樹??с????
2012/10/20 2:59 | Louis Vuitton

コメントの投稿

タイトル  
名前  
URL
コメント