C# 使用LINQ更新基于组的数据表
我有两个具有相同标识列的datatable。我想用另一个表中的其他列值更新一个表中的一列值。例如: 以下是两个表格: 表1:C# 使用LINQ更新基于组的数据表,c#,asp.net,linq,datatable,C#,Asp.net,Linq,Datatable,我有两个具有相同标识列的datatable。我想用另一个表中的其他列值更新一个表中的一列值。例如: 以下是两个表格: 表1: ID Name PaidAmount ------ ------- --------- 1 AA 0 2 BB 0 3 CC 0 表2: ID
ID Name PaidAmount
------ ------- ---------
1 AA 0
2 BB 0
3 CC 0
表2:
ID Amount
------ ---------
1 5000
2 6000
3 7000
1 2000
我想要的数据表应该是这样的:
可取的:
ID Name PaidAmount
------ ------- ---------
1 AA 7000
2 BB 6000
3 CC 7000
通常,在SQL SERVER中要更新,我们使用以下查询
UPDATE
T1
SET
T1.PaidAmount = T2.Amount
FROM
Table1 T1
INNER JOIN
(
SELECT SUM(Amount) AS Amount, ID FROM Table2 GROUP BY ID
) T2 ON T1.ID = T2.ID
但是,如何使用LINQ实现这个结果呢?我已经尝试过了,它对我来说非常有效 我通过考虑LINQ到实体来实施此解决方案 请尝试以下代码:
var result = from t1 in db.Table1
let t2 = from q in db.Table2
group q by q.ID into g
select new
{
ID = g.Min(i => i.ID),
Amount = g.Sum(i => i.Amount)
}
select new
{
t1.ID,
t1.Name,
PaidAmount = t2.Where(s => s.ID == t1.ID).FirstOrDefault().Amount,
};
foreach (var res in result.ToList())
{
Table1 t = (from t1 in db.Table1
where t1.ID == res.ID
select t1).Single();
t.PaidAmount = res.PaidAmount;
db.SaveChanges();
}
在我看来,您必须执行两个主要操作:
表2中聚集数据
var aggregatedData = db.Table2
.GroupBy(x => x.ID)
.Select(g => new
{
Id = g.Key,
Amount = g.Sum(x => x.Amount)
});
更新内容:
var joined = aggregatedData.Join(db.Table1,
aggregatedItem => aggregatedItem.Id,
x => x.ID,
(aggregated, item) => new
{
Item = item,
Data = aggregated
});
foreach(var item in joined)
{
item.Item.PaidAmount = item.Data.Amount;
}
保存数据:
db.SaveChanges();
您是使用LINQtoSQL还是LINQtoEntities??