【问题标题】:C# Data table how to concat two tables rows vertically using linqC#数据表如何使用linq垂直连接两个表行
【发布时间】:2012-10-30 07:37:19
【问题描述】:

如何使用 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

原始数据表数据:

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。

【问题讨论】:

  • 您能提供示例输入和预期输出吗?
  • 你能澄清一下你想得到什么吗?在 rawDataTable 中显示数据,并显示您想要获取的数据。
  • 你为什么不试试DataTable.Merge
  • @CuongLe 你能看看我更新的帖子吗。

标签: c# linq datatable


【解决方案1】:

你应该试试这个查询

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

希望对您有所帮助。

【讨论】:

  • 它可以工作,但它有两次重复 kwh 和 kvarh 但我只想要一个如何忽略它?
  • 不,它适用于所有行,但我只需要 1 kwh 和 1 kvarh。
  • 它将获得第一个表的不同行,但也会丢失第二个表的重复值。
  • 嘿,我在应用您的查询后在上面发布了它如何给我结果并检查我编辑的帖子
  • 而且您更新后的不同查询也无法正常工作,它也会删除第二个表重复项,但我需要它们。
猜你喜欢
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多