我在项目中使用 LINQ to SQL,但在执行 join
和 group by
来比较两个字段时遇到问题在每个表中。
这是我的查询:
var q =
(from ii in
(from a in table1
join b in table2 on a.BudgetUnitID equals b.BudgetUnitID
select new { BT = a.Amount, BA = b.Amount, BUID = a.BudgetUnitID, BU = a.BudgetUnit.BudgetUnitName })
group ii by new {ii.BUID} into g
select new
{
BudgetUnit = g.Key,
Budget = g.Sum(x => x.BA),
Actual = g.Sum(x => x.BT),
Variance = g.Sum(x => x.BA) - g.Sum(x => x.BT)
}).ToList();
我要将其绑定(bind)到网页上的 GridView 。我的问题是我没有在其中一列上获得正确的总数。
非常感谢您的帮助。
最佳答案
您的问题可能是预算金额不正确,因为您正在对每个组合进行求和。例如,如果您的预算数据如下所示:
Budget | Amount
Dev | 2500
以及像这样的订单项:
Budget | Amount
Dev | 1000
Dev | 750
然后您在内部查询中将它们组合在一起,如下所示:
BA | BT
2500 | 1000
2500 | 750
然后将它们加在一起,得到
Budget | Actual
5000 | 1750
在这种情况下,预算是应有的两倍,因为您要将每个组合的所有条目加在一起。您需要先对各个表求和,然后再将结果连接在一起,这样子查询数据中就不会出现这种“重复”问题:
var q =
(from ii in
(from a in table1 group a by a.BudgetUnitID into g
select new { BudgetUnitID = g.Key, Amount = g.Sum(x => x.Amount) })
join jj in
(from b in table2 group b by b.BudgetUnitID into g
select new { BudgetUnitID = g.Key, Amount = g.Sum(x => x.Amount) })
on ii.BudgetUnitID equals jj.BudgetUnitID
select new { Actual = ii.Amount, Budget = jj.Amount, Variance = jj.Amount - ii.Amount, BUID = ii.BudgetUnitID }
).ToList();
关于c# - 执行 LINQ 连接,然后分组,然后对两个不同的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007671/