对于某些EF EF返回null,但EF Core返回0
问题描述:
我将一个站点ASP.NET MVC迁移到ASP.NET MVC内核,并将EF转换为EF Core。对于某些EF EF返回null,但EF Core返回0
我就与空值的请求:
var q = bd.Prod
.Where(o => o.xxx == yyy)
.GroupBy(o => o.sss)
.Select(g => new
{
ccc = g.Key,
vvv = g.Sum(i => i.qqq),
bbb = g.Sum(i => i.fff),
nnn = g.Sum(i => i.ggg),
});
当我之时,所有的细胞都为空执行该代码与EF返回null。但EF Core的所有单元都为空时返回0。 如何让EF核心返回null?
答
var q = bd.Prod
.Where(o => o.xxx == yyy)
.GroupBy(o => o.sss)
.Select(g => new
{
ccc = g.Key,
vvv = g.Sum(i => i.qqq),
bbb = g.Sum(i => i.fff),
nnn = g.Sum(i => i.ggg),
})
.DefaultIfEmpty(null);
+1
OP显式提到0值为当前不需要的结果。 'DefaultIfEmpty'影响是否有任何项目被返回。换句话说,这对OP来说没有任何影响。已有评论指出这一点。这仍然是事实,它仍然需要指出。 – hvd
答
如果你想以下几点:
- 空集 - >
null
- 只有
null
值 - >null
- 任何数字的组合和
null
值 - >号码
试试这个代码:
items.Aggregate((int?)null, (acc, item) => acc.HasValue ? acc + item.GetValueOrDefault() : item);
责怪他们:) https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/2410716-result-of-sum -of-an-empty-set-should-be-0-rather – grek40
目前没有运气,因为EF Core在内存中处理了GroupBy(所谓的客户端评估),这是LINQ To Objects'Sum'实现的已知行为。等待EF Core v.2获得*最终*固定。 –
@ grek40差不多:它不是空集的总和,而是空集的总和。 'null'被丢弃,剩下的就是一个空集,但这并不是在遇到'null'时唯一可能的合理行为。 – hvd