2

プロジェクトでLINQtoSQLを使用していますが、各テーブルにある2つのフィールドを比較するためにajoinとaの両方を実行する際に問題が発生します。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();

これをWebページのグリッドビューにバインドします。私の問題は、列の1つで合計が正しくないことです。

あなたの助けは大歓迎です。

4

1 に答える 1

2

組み合わせごとに予算額を合計しているため、予算額が正しくない可能性があります。たとえば、次のような予算データがあるとします。

Budget | Amount
Dev    | 2500

広告申込情報は次のようになります。

Budget | Amount
Dev    | 1000
Dev    | 750

次に、次のように内部クエリでそれらを組み合わせます。

BA   | BT
2500 | 1000
2500 | 750

そして、それらを合計すると、

Budget | Actual
5000   | 1750

この場合、組み合わせごとにすべてのエントリを合計しているため、予算は本来の 2 倍になります。サブクエリデータでこの「重複」の問題が発生しないように、結果を結合する前に、最初に個々のテーブルを合計する必要があります。

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();
于 2012-08-17T14:36:42.313 に答える