Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架核心和子查询引发无效操作异常_C#_Asp.net Core_Entity Framework Core_Entity Framework Core 2.1 - Fatal编程技术网

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提供程序