【问题标题】:Doing a LINQ join, then group by, then a sum on two different columns做一个 LINQ 连接,然后分组,然后在两个不同的列上求和
【发布时间】:2012-08-17 14:25:59
【问题描述】:

我在一个项目中使用 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();

我将把它绑定到网页上的网格视图。我的问题是我没有在其中一列上得到正确的总数。

非常感谢您的帮助。

【问题讨论】:

  • “我的问题是我没有得到正确的列之一。”但是你不能说哪一列,或者给我们任何样本数据,预期输出或实际输出?请阅读tinyurl.com/so-hints

标签: c# linq join group-by sum


【解决方案1】:

您的问题很可能是预算金额不正确,因为您正在为每个组合对它们求和。例如,如果您的预算数据如下所示:

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    相关资源
    最近更新 更多