3

LINQを使用して、リストデータのリストを結合(内部結合)するにはどうすればよいですか

データ例:

List<List<string>> datas1 = new List<List<string>>();
datas1.add(new List() { "1", "Item 1" });
datas1.add(new List() { "2", "Item 2" });
datas1.add(new List() { "3", "Item 3" });

List<List<string>> datas2 = new List<List<string>>();
datas1.add(new List() { "1", "20" });
datas1.add(new List() { "2", "10" });

期待される結果List<List<string>>:

List("1", "Item 1", "20");
List("2", "Item 2", "10");

私は試します

var result = datas1
      .Join(datas2, d1 => datas1[0], d2 => datas2[0], (d1, d2) => { d1 })
      .ToList();

空の結果が得られたら、試してください:

var result = datas1
          .Join(datas2, d1 => datas1[0][0], d2 => datas2[0][0], (d1, d2) => { d1 })
          .ToList();

data1 ごとに重複した結果が得られます。

4

2 に答える 2

3

結合のラムダ式内でパラメーターを使用していません。 datas1[0]anddatas2[0]の代わりにd1[0]andを使用していますd2[0]。さらに、結果への投影は、あなたが望んでいると言ったことを望んでいません。

クエリは次のようになります。

var result = datas1
      .Join(datas2, d1 => d1[0], d2 => d2[0], 
            (d1, d2) => new List<string> { d1[0], d1[1], d2[1] })
      .ToList();

または、クエリ式を使用できます。

var result = (from d1 in datas1
              join d2 in datas2 on d1[0] equals d2[0]
              select new List<string> { d1[0], d1[1], d2[1] })
             .ToList();

(個人的には、この場合、クエリ式以外のバージョンを使い続けると思います。)

ただし、ただし、すべてのデータに適切な型を使用する方が良いでしょうList<List<string>>。おそらく、結果には匿名型を使用します。たとえば、次のようなものがあります。

var result = datas1
      .Join(datas2, d1 => d1.Id, d2 => d2.Id, 
            (d1, d2) => new { d1.Id, d1.Name, d2.Description })
      .ToList();

intまた、数値を文字列ではなく値に格納することもできます...

于 2013-10-05T12:33:51.837 に答える
1
//Sample data
List<List<string>> datas1 = new List<List<string>>();
datas1.Add(new List<string>() { "1", "Item 1" });
datas1.Add(new List<string>() { "2", "Item 2" });
datas1.Add(new List<string>() { "3", "Item 3" });

List<List<string>> datas2 = new List<List<string>>();
datas2.Add(new List<string>() { "1", "20" });
datas2.Add(new List<string>() { "2", "10" });

次のように参加する必要がありdatas1 ます datas2 on d1[0][0] equals d2[0][0]

//Query
var result = (from d1 in datas1
              join d2 in datas2 on d1[0][0] equals d2[0][0]
              select new List<string> { d1[0], d1[1], d2[1] })
             .ToList();
于 2013-10-05T16:43:54.680 に答える