我有两个数据表,每个数据表有70-80列不同。我想在比较c#中两者的主键之后,用其他数据表字段值更新一个数据表字段的值。
假设我有一个数据表dt1包含行和60列。
我有另一个数据表dt2包含行和70列。 10列dt1与dt2匹配。 30行dt1与dt2匹配。 所以我想比较两个数据表的主键和之后是否匹配从dt1到dt2的更新列值。
答案 0 :(得分:0)
这是你的答案,考虑dt1 = Customer和dt2 = Order,CustomerId存在于两个数据表中,我也使用LINQ扩展方法加入它们,最后从两个数据表中选择列。谢谢。
static void Main(string[] args)
{
DataTable dt1 = new DataTable(); //dt1=Customer
dt1.Columns.Add("CustomerId", typeof(int));
dt1.Columns.Add("Name", typeof(string));
dt1.Rows.Add(1, "Customer A");
dt1.Rows.Add(2, "Customer B");
dt1.Rows.Add(3, "Customer C");
DataTable dt2 = new DataTable(); //dt2=Order
dt2.Columns.Add("OrderId", typeof(int));
dt2.Columns.Add("CustomerId", typeof(int)); //Fk
dt2.Columns.Add("OrderDate", typeof(DateTime));
dt2.Columns.Add("OrderAmount", typeof(double));
dt2.Rows.Add(1, 1,DateTime.Now,15000);
dt2.Rows.Add(2, 1, DateTime.Now,10000);
dt2.Rows.Add(3, 2, DateTime.Now,25000);
var result = dt2.AsEnumerable()
.Join(dt1.AsEnumerable(),
x => x.Field<int>("CustomerId"), //Order(CustomerId) FK
y => y.Field<int>("CustomerId"), //Customer Id(Pk)
(x, y) => new { dt2 = x, dt1 = y }) //dt2=Order, dt1=Customer
.Select(x => new
{
OrderId = x.dt2.Field<int>("OrderId"),
CustomerId = x.dt1.Field<int>("CustomerId"),
Name = x.dt1.Field<string>("Name"),
OrderDate = x.dt2.Field<DateTime>("OrderDate"),
OrderAmount = x.dt2.Field<double>("OrderAmount"),
});
foreach (var item in result)
{
Console.WriteLine("Order Id: {0}, CustomerId: {1}, Name: {2}, OrderDate: {3}, OrderAmount: {4}",
item.OrderId,item.CustomerId,item.Name,item.OrderDate,item.OrderAmount);
}
Console.ReadKey();
}
答案 1 :(得分:0)
不幸的是,您需要单独引用表格。
UPDATE tbl1 SET
col2c=(SELECT colc2 FROM tbl2 WHERE tbl2_pk=tbl1.tbl1_pk),
col4e=(SELECT cole4 FROM tbl2 WHERE tbl2_pk=tbl1.tbl1_pk)
WHERE test.tbl1.tbl1_pk=(SELECT tbl2_pk FROM tbl2 WHERE tbl1_pk=tbl2_pk)