【发布时间】:2018-02-27 17:25:29
【问题描述】:
我正在尝试使用 GroupJoin 和 SelectMany 在 linq 中执行“左外连接”,但我还想使用 GroupBy 和 Sum 聚合结果。
但是当我执行下面的代码时,我得到:
System.NotSupportedException: '无法在 LINQ to Entities 查询中构造实体或复杂类型'...tableB'。'
Repo<tableA>().All()
.Where(i =>
(i.Date >= dateF && i.Date <= dateT)
&&
i.EndOfMonth
)
.GroupJoin(
Repo<tableB>().All().Where(i => (i.fieldX = ...somevalue... )),
dt => dt.DayIndex, scd => scd.DayIndex, (dt, scd) =>
new {
dt = dt,
scd = scd,
}
)
.SelectMany(
jn => jn.scd.DefaultIfEmpty( new tableB { Count1 = 0, Count2 = 0 }), // runtime error here
(dt,scd) => new { dt=dt.dt, scd = scd}
)
.GroupBy(i => i.dt)
.Select(i => new CountListItem
{
Date = i.Key.Date,
CountField1 = i.Sum(o => o.scd.Count1),
CountField2 = i.Sum(p => p.scd.Count2)
})
.OrderBy(i => i.Date)
.ToList()
当我只是做DefaultIfEmpty() 时,我得到了错误:
System.InvalidOperationException:“转换为值类型“System.Int32”失败,因为具体化值为 null。结果类型的泛型参数或查询必须使用可为空的类型。'
我假设,我必须承认,这是因为 Sum 遇到空值。
我试过i.Sum(o => o.scd.Count1 ?? 0,但它说:
运算符'??'不能应用于“int”和“int”类型的操作数 [原文]
我也试过DefaultIfEmpty(new { Count1 = 0, Count2 =0}),但这给了我>
...无法推断类型。
我怎样才能让它工作?
【问题讨论】:
标签: c# entity-framework linq entity-framework-6