【发布时间】:2019-02-27 02:39:28
【问题描述】:
我正在尝试将以下 sql 查询转换为 EF
sql查询
Select Sum([KiloWatt]) as 'Sum',
Min([KiloWatt]) as 'Min',
Max([KiloWatt]) as 'Max',
Sum([KiloWatt])/COUNT([KiloWatt]) as 'Average',
CONVERT(date, [DateTime])
from OneHourElectricitys
where [DateTime] < SYSDATETIME()
group by CONVERT(date, [DateTime])
EF 代码
var analytics = await _analyticsRepository.Query().Where(x => x.DateTime.Subtract(DateTime.Today).Days < 0)
.GroupBy(x => x.DateTime.Date)
.Select(x => new
{ DateTime = x.Key,
Max = x.Max(y => y.KiloWatt),
Min = x.Min(y => y.KiloWatt),
Avg = x.Sum(y => y.KiloWatt)/ x.Count(),
Sum = x.Sum(y => y.KiloWatt)
})
.ToListAsync();
堆栈跟踪:-
System.ArgumentException: 必须是可约节点 在 System.Linq.Expressions.Expression.ReduceAndCheck() 在 System.Linq.Expressions.Expression.ReduceExtensions()
我做错了吗?
-- 更新--
以下 2 个 EF 查询运行良好,但将它们组合起来会出现错误。
var analytics = await _analyticsRepository.Query().Where(x => x.DateTime.Subtract(DateTime.Today).Days < 0)
var analytics = await _analyticsRepository.Query().GroupBy(x => x.DateTime.Date)
.Select(x => new
{ DateTime = x.Key,
Max = x.Max(y => y.KiloWatt),
Min = x.Min(y => y.KiloWatt),
Avg = x.Sum(y => y.KiloWatt)/ x.Count(),
Sum = x.Sum(y => y.KiloWatt)
})
.ToListAsync();
【问题讨论】:
-
在 EF Core 2.0.3 上试过,无法重现。还可以考虑升级到 2.1.3 - 以及包含
GroupBy优化的修复(转换为 SQL,而不是像您使用的版本那样执行客户端)。 -
嗨@IvanStoev,感谢您的评论。一旦我更新到 2.1.3,我就能够成功编译和运行。请将此作为答案。
标签: c# entity-framework entity-framework-core ef-core-2.0