C# 实体框架核心和子查询引发无效操作异常
我有下面一行代码来计算总成本C# 实体框架核心和子查询引发无效操作异常,c#,asp.net-core,entity-framework-core,entity-framework-core-2.1,C#,Asp.net Core,Entity Framework Core,Entity Framework Core 2.1,我有下面一行代码来计算总成本 var results = dbContext.Logs.Select(x => new { Cost = x.Rows.Sum(y => x.Rows.SelectMany(z => z.Organisation.UserRoleRates).Single(z => z.OrganisationId == y.OrganisationId && z.UserRoleId == y.Lo
var results = dbContext.Logs.Select(x => new
{
Cost = x.Rows.Sum(y => x.Rows.SelectMany(z => z.Organisation.UserRoleRates).Single(z => z.OrganisationId == y.OrganisationId && z.UserRoleId == y.Log.User.UserRole.Id).CostPerHour * y.DurationHours)
}).ToList();
执行此操作时,将引发一个异常,并显示以下消息
InvalidOperationException:从作用域“”引用了类型为“Microsoft.EntityFrameworkCore.Storage.ValueBuffer”的变量“x”,但未定义该变量
如果我更改为code以直接调用ToList()
(避免EF执行表达式),它将按预期工作
var results = dbContext.Logs.ToList().Select(x => new
{
Cost = x.Rows.Sum(y => x.Rows.SelectMany(z => z.Organisation.UserRoleRates).Single(z => z.OrganisationId == y.OrganisationId && z.UserRoleId == y.Log.User.UserRole.Id).CostPerHour * y.DurationHours)
}).ToList();
是否可以使表达式与实体框架核心一起工作?错误消息非常奇怪,似乎与linq表达式没有直接关系。您是否尝试过更改别名(此处:
x
)?顺便说一句,在“列表”中选择与在IQueryable上选择完全不同。前者是一个动作lambda(使用匿名方法),后者是一个表达式。两者都使用lambda语法,但其中一个(匿名方法)是可执行代码,表达式只是描述代码的元数据。表达式可以执行/计算。需要先将其编译为Action/Func,然后才能执行/计算如果我更改变量的名称,我会得到相同的异常,只是使用新变量名而不是“x”。哪个DB提供程序?(他们是将表达式转换为SQL的人)我正在使用SQL Server提供程序