LINQ错误Group by sum上的列名无效

LINQ错误Group by sum上的列名无效,linq,linq-to-sql,Linq,Linq To Sql,出于某种原因,在对分组依据使用两个求和时,我遇到了错误“无效列名'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.

出于某种原因,在对分组依据使用两个求和时,我遇到了错误“无效列名'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))
        }
为什么我不能同时得到承诺总额和间接费用总额

我的基本表格结构如下:

详细资料 Id(int)
PrId(int)
计划基金(linq类)
项目详细信息(linq类)

项目详情 Id(int)
成本中心(linq级)
Wbs(linq类)

普拉蒙特 Id(int)
PrDetailId(int)
委员会数量(十进制)

OverdeAmount(decimal)

关于我唯一能想到的可能是与参数名称冲突。请尝试以下方法:

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))
}

您应该启动一个SQL探查器并检查要生成的确切SQL,这将引导您走向正确的方向

您是否为任何表设置了任何关联/关系?是的,所有关系都存在。如果没有这些关系,最后两个LINQ查询将无法运行成功。