这是一个两个表的左连接,在group by中的g.rpt.Location
行,g.rpt
可能是空的,所以我收到了关于取消引用一个可能的空对象的警告。ctx是一个代码优先的Entity Frameworks数据库。
var query = ctx.ObjTable
.GroupJoin(ctx.RptTable, obj => obj.Upc,
rpt => rpt.Upc,
(obj, rpt) => new { obj, rpt })
.SelectMany(j => j.rpt.DefaultIfEmpty(), (j, rpt) => new
{
j.obj, rpt,
})
.GroupBy(g => new
{
g.rpt.Location, //Problem here
g.obj.Category,
g.obj.Desc,
}
.Select(s => new MyClass
{
Location = s.Key.Location,
Category = s.Key.Category,
Desc = s.Key.Desc,
Total = s.Sum(x => x.rpt.Numeric),
});
我尝试了g.rpt?.Location
,但是得到了“表达式树lambda可能不包含空传播操作符”。
已尝试g.rpt == null ? null : g.rpt
。已尝试使用??。
我试过了,似乎有点牵强,但我试过了...
.GroupBy(g => g.rpt == null
? new
{
g.rpt.Location,
g.obj.Category,
g.obj.Desc,
}
: new
{
g.obj.Category,
g.obj.Descriptor,
})
2条答案
按热度按时间t9aqgxwy1#
您可以在
DefaultOrEmpty
中提供自己的默认值,例如6tqwzwtp2#
多亏了Mike Mozhaaev的评论,这个方法成功了。提取SelectMany中进一步操作所需的值。
我希望我能选择两个正确的答案,因为他提供的另一个答案也有效。