有数据集Ds1和数据集Ds2,DS1有Product_ID,产品信息和ds2有Product_ID,product_type。
对于匹配的product_id,我想将ds2的Product_tye列添加到ds1。
注意:Product_id不是ds 1中的主键,结果集中有许多产品具有相同的product_id。在ds 2中,product_id是唯一的。另外,这些数据来自不同服务器上的两个不同数据库,并且具有不同的凭据,因此无法使用sql连接。
我尝试使用linq来实现这一点,但没有得到所需的输出,如果我正在搞什么,请纠正我。
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
//After both the datatble has values, using linq to add datatble columsn,
DataTable result = (from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable() on t1.Field<string>("productID") equals t2.Field<string>("productID")
select t1).CopyToDataTable();
答案 0 :(得分:0)
我刚刚为您创建了一个简单的示例,您需要做的是使用您自己的代码更改我的代码中的列名:
DataTable table1 = new DataTable();
DataTable table2 = new DataTable();
table1.Columns.Add("id", typeof(int));
table1.Columns.Add("name", typeof(string));
table2.Columns.Add("id", typeof(int));
table2.Columns.Add("age", typeof(int));
table1.Rows.Add(1, "mitja");
table1.Rows.Add(2, "sandra");
table1.Rows.Add(3, "nataška");
table2.Rows.Add(1, 31);
table2.Rows.Add(3, 24);
table2.Rows.Add(4, 46);
DataTable targetTable = table1.Clone();
//create new column
targetTable.Columns.Add("age");
var results = from t1 in table1.AsEnumerable()
join t2 in table2.AsEnumerable() on t1.Field<int>("id") equals t2.Field<int>("id")
select new
{
ID = (int)t1["id"],
NAME = (string)t1["name"],
AGE = (int)t2["age"]
};
foreach (var item in results)
targetTable.Rows.Add(item.ID, item.NAME, item.AGE);
在任何情况下都要小心定义变量类型(int,string,...)! 希望它有所帮助。
答案 1 :(得分:0)
选择两个表
DataTable result = (from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable() on t1.Field<string>("productID")
equals t2.Field<string>("productID")
select new {t1,t2}
).CopyToDataTable();
或选择所选列
DataTable result = (from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable() on t1.Field<string>("productID")
equals t2.Field<string>("productID")
select new {
productId = t1.productID,
col2 = t1.col2,...,
productType = t2.pruductType
).CopyToDataTable();
注意:我认为productID类型应为int
类型,因此在这种情况下将string
替换为int