Ошибка LINQ Неверное имя столбца в группе по сумме - PullRequest
3 голосов
/ 15 декабря 2008

Почему-то при использовании двух сумм в группе я сталкиваюсь с ошибкой "недопустимое имя столбца '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)

ProjectDetails

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

PrAmounts

Id (int)
PrDetailId (int)
CommittedAmount (десятичное число)
Накладные расходы (десятичные)

Ответы [ 2 ]

3 голосов
/ 22 декабря 2008

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

1 голос
/ 16 декабря 2008

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

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))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...