繁体   English   中英

C#数据表如何使用linq垂直合并两个表行

[英]C# Data table how to concat two tables rows vertically using linq

如何使用linq从两个表垂直合并行,我已经为此编写了查询,但是它添加到第一行旁边,因此我将列数加倍,但是我想通过下一行合并。

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

谢谢,@ nag。

您应该尝试此查询

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

您可以从第二个获得重复,但不能从第一个获得重复。

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

希望会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM