繁体   English   中英

在数据集中添加数据表的列

[英]Add columns of datatables in a dataset

我有一个带有2个DataTableDataSet 每个DataTable包含一个称为“成本”的列。 我想计算一个名为Result table的表中的2个表的所有成本的总和,如下例所示。 我怎样才能做到这一点?

Table 1
Name  | cost
balan |  6
gt    |  5

Table 2
Name  |  cost
balan |  2
gt    |  8

Result table
Name  | cost
balan | 8
gt    | 12

这是一种方法:

DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable results = new DataTable();

dt1.Columns.Add("Name");
dt1.Columns.Add("cost", typeof(int));
dt2.Columns.Add("Name");
dt2.Columns.Add("cost", typeof(int));
results.Columns.Add("Name");
results.Columns.Add("cost", typeof(int));

dt1.Rows.Add("balan", 6);
dt2.Rows.Add("balan", 2);
dt1.Rows.Add("gt", 5);
dt2.Rows.Add("gt", 8);


foreach (DataRow dr1 in dt1.Rows)
{
    results.Rows
        .Add(
            dr1["Name"], 
            (int)dr1["cost"] + (int)dt2.Select(String.Format("Name='{0}'", dr1["name"]))[0]["cost"]
        );
}

要获得结果,您可以执行类似

var table1 = yourDataSet.Tables["Table 1"];
var table2 = yourDataSet.Tables["Table 2"];

var results = table1.AsEnumerable().Select(t1 => new {
                  name = t1.Field<string>("Name"),
                  cost = t1.Field<int>("cost")
              })
              .Concat(

              table2.AsEnumerable().Select(t2 => new {
                  name = t2.Field<string>("Name"),
                  cost = t2.Field<int>("cost")
              })
              )
              .GroupBy(m => m.name)
              .Select(g => new {
                 name = g.Key,
                 cost = g.Sum(x => x.cost)
              });

这不会给你一个dataTable,而是一个IEnumerable。 要将IEnumerable转换为dataTable,请参见此处的示例

或更简单(如果table1和table2具有相同的行)

var table1 = yourDataSet.Tables["Table 1"];
var table2 = yourDataSet.Tables["Table 2"];

var results = new DataTable();

results.Columns.Add("Name");
results.Columns.Add("cost", typeof(int));

table1.AsEnumerable().Concat(table2.AsEnumerable())
                .GroupBy(m => m.Field<string>("Name"))
                .Select(g => results.Rows.Add(g.Key, g.Sum(x => x.Field<int>("cost"))));

暂无
暂无

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

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