Ошибка LINQ Неверное имя столбца в группе по сумме

По какой-то причине при использовании двух сумм в группе я сталкиваюсь с ошибкой «недопустимое имя столбца« id ». Когда я делаю только одну сумму, она работает, как и ожидалось.

Следующий сбой и выдает ошибку:

from pd in PrDetails.Where(_pd => _pd.PrId == 46)
    group pd by new { pd.ProgramFund, pd.ProjectDetail.CostCenter, pd.ProjectDetail.Wbs }
    into g
select new
    {
        g.Key.ProgramFund,
        g.Key.CostCenter,
        g.Key.Wbs,
        CommittedTotal = g.Sum(_pd => _pd.PrDetailPrAmounts.Sum(_pa => _pa.CommittedAmount)),
        OverheadTotal = g.Sum(_pd => _pd.PrDetailPrAmounts.Sum(_pa => _pa.OverheadAmount))
    }

Однако, следующее делает работу штрафа:

from pd in PrDetails.Where(_pd => _pd.PrId == 46)
    group pd by new { pd.ProgramFund, pd.ProjectDetail.CostCenter, pd.ProjectDetail.Wbs }
    into g
select new
    {
        g.Key.ProgramFund,
        g.Key.CostCenter,
        g.Key.Wbs,
        CommittedTotal = g.Sum(_pd => _pd.PrDetailPrAmounts.Sum(_pa => _pa.CommittedAmount))
    }

А также , когда я получаю общее количество накладных расходов, а не зафиксированное общее, оно прекрасно работает:

from pd in PrDetails.Where(_pd => _pd.PrId == 46)
        group pd by new { pd.ProgramFund, pd.ProjectDetail.CostCenter, pd.ProjectDetail.Wbs }
        into g
    select new
        {
            g.Key.ProgramFund,
            g.Key.CostCenter,
            g.Key.Wbs,
            OverheadTotal = g.Sum(_pd => _pd.PrDetailPrAmounts.Sum(_pa => _pa.OverheadAmount))
        }

Почему я не могу получить зафиксированную сумму и общую сумму накладных расходов одновременно?

У меня есть наша основная структура таблицы ниже:

PrDetails

Id (int)
PrId (int)
ProgramFund (класс linq)
ProjectDetail (класс linq)

Подробности проекта

Id (int)
CostCenter (класс linq)
Wbs (класс linq)

PrAmounts

Id (int)
PrDetailId (int)
CommittedAmount (десятичный)
OverheadAmount (десятичный)

15.12.2008 20:18:03
У вас есть какие-либо ассоциации / отношения, установленные для какой-либо из таблиц?
Andrew Theken 15.12.2008 20:26:35
Да, все отношения существуют. Если бы связей не было, два последних запроса LINQ не смогли бы успешно выполнить.
taco 15.12.2008 20:30:49
2 ОТВЕТА
РЕШЕНИЕ

Единственное, о чем я могу думать - это конфликт с именами ваших параметров. Попробуй это:

from pd in PrDetails.Where(_pd => _pd.PrId == 46)
group pd by new { pd.ProgramFund, pd.ProjectDetail.CostCenter, pd.ProjectDetail.Wbs }
into g
select new
{
    g.Key.ProgramFund,
    g.Key.CostCenter,
    g.Key.Wbs,
    CommittedTotal = g.Sum(_pd1 => _pd1.PrDetailPrAmounts.Sum(_pa1 => _pa1.CommittedAmount)),
    OverheadTotal = g.Sum(_pd2 => _pd2.PrDetailPrAmounts.Sum(_pa2 => _pa2.OverheadAmount))
}
1
15.12.2008 22:14:04

Вам следует запустить профилировщик SQL и проверить, какой именно SQL создается для начала, и это должно направить вас в правильном направлении.

3
21.12.2008 21:37:49