簡體   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