当我试图在结果集上调用Average()时,即使我使用DefaultIfEmpty(),也会得到以下错误。
产生错误的代码:
var Test = context.FuelRecords.Select(e => (double) e.MilesDriven).DefaultIfEmpty();
Console.WriteLine(Test.GetType());
foreach (var t in Test)
{
Console.WriteLine(t);
Console.WriteLine(t.GetType());
}
var Test2 = context.FuelRecords.Select(e => (double)e.MilesDriven).DefaultIfEmpty().Average();
输出:
Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[System.Double]
0
System.Double
fail: Microsoft.EntityFrameworkCore.Query[10100]
An exception occurred while iterating over the results of a query for context type 'MileageCalculator.Models.MileageContext'.
System.InvalidOperationException: Sequence contains no elements.
at lambda_method(Closure , QueryContext , DbDataReader , ResultContext , Int32[] , ResultCoordinator )
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
System.InvalidOperationException: Sequence contains no elements.
at lambda_method(Closure , QueryContext , DbDataReader , ResultContext , Int32[] , ResultCoordinator )
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
我不知道我错过了什么,因为我看到的每一篇与此相关的文章似乎都是通过将DefaultIfEmpty链接到Select()上来修复的。
我尝试将0指定为DefaultIfEmpty()的参数,但没有效果。看起来不管DefaultIfEmpty,Average()调用都会查看原始的select查询。
1条答案
按热度按时间ppcbkaq51#
你必须使用
Average
重载来接受可空值: