0

linqを使用して2つのテーブルから行を垂直に連結する方法、私はすでにそのためのクエリを作成しましたが、最初の行の隣に追加するため、列数が2倍になりますが、次の行で連結したい.

var dd4 = from tbl in dataTb.AsEnumerable()
                      join dpi in rawDataTable.AsEnumerable() on tbl["Account_No"] equals dpi["Account_No"]
                      select tbl.ItemArray.Concat(dpi.ItemArray).ToArray();

それは私に次のような構造を与えます

col1 col2 col3.... col24 しかし、私のテーブルには 12 列しかないので、その隣に追加しますが、12 列の終わりの後に新しい行を開始するにはどうすればよいですか。

dataTb テーブル データ:

chNo Chunit  val1  val2  val3 val4
 1    kwh    2010  2011  2012 2009
 2    kvarh  2012  2011  2008 2009

rawDataTable データ:

chNo Chunit  val1  val2  val3 val4
 1    kw     2.2   2.1   2.1  2.0
 2    kvar   1.2   1.1   1.1  1.0

次のように追加しています。

1    kwh    2010  2011  2012 2009  1    kw     2.2   2.1   2.1  2.0
1    kwh    2010  2011  2012 2009  2    kvar   1.2   1.1   1.1  1.0
2    kvarh  2012  2011  2008 2009  1    kw     2.2   2.1   2.1  2.0
2    kvarh  2012  2011  2008 2009  2    kvar   1.2   1.1   1.1  1.0

しかし、私はこのようにしたい:

1    kwh    2010  2011  2012 2009
1    kw     2.2   2.1   2.1  2.0
2    kvar   1.2   1.1   1.1  1.0
2    kvarh  2012  2011  2008 2009
1    kw     2.2   2.1   2.1  2.0
2    kvar   1.2   1.1   1.1  1.0

現在取得中: しかし、上記のようにしたい (Yograj の場合)

1    kwh    2010  2011  2012 2009
2    kvarh  2012  2011  2008 2009
1    kw     2.2   2.1   2.1  2.0
2    kvar   1.2   1.1   1.1  1.0
1    kw     2.2   2.1   2.1  2.0
2    kvar   1.2   1.1   1.1  1.0

ありがとう、@ナグ。

4

1 に答える 1

0

このクエリを試してみてください

var dd4 = from tbl in dataTb.AsEnumerable()
          join dpi in rawDataTable.AsEnumerable() 
          on tbl["Account_No"] equals dpi["Account_No"]
          select new {datarows = new []{ tbl, dpi}};

var resultDataTable = dd4.SelectMany(x=>x.datarows).CopyToDataTable();

2番目からは複製できますが、最初からは複製できません。

var resultDataTable = dd4.Select(x=>x.datarows.First()).Distinct()
                      .Concat(dd4.Select(x=>x.datarows.Last()))
                      .CopyToDataTable();

目的の出力でこれを試してください

var records = from x in dd4
              group x by x.datarows.First() into y
              select y;

List<DataRow> rows = new List<DataRow>();

foreach(var item in records)
{
   rows.Add(item.Key);
   rows.AddRange(item.ToList().Select(x=>x.datarows.Last()));
}

var resultDataTable = rows.CopyToDataTable();

それが役立つことを願っています。

于 2012-10-30T08:07:53.043 に答える