使用linq合并两个DataTables的列 [英] Merge columns of two DataTables using linq

查看:101
本文介绍了使用linq合并两个DataTables的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个DataTable:dt1dt2.

dt1 :

dt1:

ID     | Name     | Address | QTY
-------+----------+---------+-----
A1     | Dog      | C1      | 272    
A2     | Cat      | C3      | 235    
A3     | Chicken  | C2      | 254    
A4     | Mouse    | C4      | 259 
A5     | Pig      | C5      | 233 

dt2 :

dt2:

ID     | Name     | Address | QTY MAX
-------+----------+---------+--------
A1     | Dog      | C1      | 250    
A2     | Cat      | C3      | 200    
A3     | Chicken  | C2      | 300    
A6     | Rabbit   | C6      | 350    

但是,我想像下面那样将dt1dt2合并到dt3:

But, I want to merge dt1 and dt2 to dt3 like below:

ID     | Name     | Address | QTY   | QTY MAX
-------+----------+---------+-------+--------
A1     | Dog      | C1      | 272   | 250
A2     | Cat      | C3      | 235   | 200
A3     | Chicken  | C2      | 254   | 300
A4     | Mouse    | C4      | 259   | 0
A5     | Pig      | C5      | 233   | 0
A6     | Rabbit   | C6      | 0     | 350

有人可以帮助我吗?

推荐答案

此解决方案不是不是 解决方案,因为您只需使用DataTable.Merge& DataTable.PrimaryKey获得所需的输出.

This solution is not a linq solution as you could simply use DataTable.Merge & DataTable.PrimaryKey to get the desired output.

这是一个可以使用的虚拟示例:

Here is a dummy example which you can use:

var dt1 = new DataTable();
var p1 = dt1.Columns.Add("a", typeof(int)); //Use this to add Primary Key constraint
dt1.Columns.Add("b");
dt1.Columns.Add("c");
dt1.Rows.Add("1", "apple", "10");
dt1.Rows.Add("2", "mango", "20");
dt1.Rows.Add("3", "orange", "30");
dt1.Rows.Add("4", "banana", "40");
dt1.PrimaryKey = new DataColumn[] { p1 }; //This removes duplication of rows

var dt2 = new DataTable();
var p2 = dt2.Columns.Add("a", typeof(int)); //Use this to add Primary Key constraint        
dt2.Columns.Add("b");
dt2.Columns.Add("d");
dt2.Rows.Add("1", "apple", "50");
dt2.Rows.Add("2", "mango", "60");
dt2.Rows.Add("3", "orange", "70");
dt2.Rows.Add("5", "grapes", "80");
dt2.PrimaryKey = new DataColumn[] { p2 }; //This removes duplication of rows

var dt3 = dt1.Copy();
dt3.Merge(dt2);  // Merge here merges the values from both provided DataTables

考虑您的问题:

var dt1 = new DataTable();
var p1 = dt1.Columns.Add("ID", typeof(string));
dt1.Columns.Add("Name", typeof(string));
dt1.Columns.Add("Address", typeof(string));
dt1.Columns.Add("Qty", typeof(int));
dt1.Columns["Qty"].DefaultValue = 0; //Setting default value
dt1.Rows.Add("A1", "Dog", "C1", 100);
dt1.Rows.Add("A2", "Cat", "C3", 200);
dt1.Rows.Add("A3", "Chicken", "C2", 300);
dt1.Rows.Add("A4", "Mouse", "C4", 400);
dt1.Rows.Add("A5", "Pig", "C5", 500);
dt1.PrimaryKey = new DataColumn[] { p1 };

var dt2 = new DataTable();
var p2 = dt2.Columns.Add("ID", typeof(string));
dt2.Columns.Add("Name", typeof(string));
dt2.Columns.Add("Address", typeof(string));
dt2.Columns.Add("Qty Max", typeof(int));
dt2.Columns["Qty Max"].DefaultValue = 0; //Setting default value
dt2.Rows.Add("A1", "Dog", "C1", 600);
dt2.Rows.Add("A2", "Cat", "C3", 700);
dt2.Rows.Add("A3", "Chicken", "C2", 800);
dt2.Rows.Add("A6", "Rabbit", "C6", 900);
dt2.PrimaryKey = new DataColumn[] { p2 };

var dt3 = dt1.Copy();
dt3.Merge(dt2);

输出:

感谢@ shA.t建议包含DataColumn.DefaultValue,以便可以将空白单元格替换为0.另外,他的答案似乎还包括功能的问题是您要寻找的东西!

Thanks @shA.t for suggesting to include DataColumn.DefaultValue so that blank cells could be replaced with 0. Also his answer seems to include linq features which I guess is what you are looking for!

这篇关于使用linq合并两个DataTables的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆