Entity framework core 工会可以';无法转换为SQL
我正在使用EFCore 2.2.3,并且禁用了本地评估 我有以下疑问Entity framework core 工会可以';无法转换为SQL,entity-framework-core,azure-sql-database,.net-core-2.2,Entity Framework Core,Azure Sql Database,.net Core 2.2,我正在使用EFCore 2.2.3,并且禁用了本地评估 我有以下疑问 var query1 = companyContext.Companies.Where(c => c.Name == name); var query2 = companyContext.Companies.Where(c => c.Id == 10); 如果我自己执行它们,它们就会正常工作 await query1.ToListAsync(); await query2.ToListAsync(); 但是如果
var query1 = companyContext.Companies.Where(c => c.Name == name);
var query2 = companyContext.Companies.Where(c => c.Id == 10);
如果我自己执行它们,它们就会正常工作
await query1.ToListAsync();
await query2.ToListAsync();
但是如果我试着
var result = await query1.Union(query2).ToListAsync();
我得到以下错误:
InvalidOperationException:为警告生成错误
'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning:
LINQ表达式'Union({来自中的c公司
值(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[MagliteTest.Database.Company])
其中([c].Id==10)select[c]})”无法翻译,将被删除
在当地进行评估。此异常可以通过以下方式抑制或记录:
正在将事件ID“RelationalEventId.QueryClientEvaluationWarning”传递给
“DbContext.OnConfiguring”中的“ConfigureWarnings”方法,或
“AddDbContext”
实体框架核心是否不支持union?
union
/Concat
服务器(SQL)翻译尚不支持(从EF core 2.x开始)
该问题由以下人员跟踪
根据那个链接,它被安排在EF Core 3.0上。谢谢,我想在3.0发布之前,我必须启用本地评估,这似乎让人非常沮丧。是的。3.0中最大的变化之一(迫不及待!)实际上将是删除客户端评估-:)遇到此链接,并惊讶于您建议使用客户端评估。您会不会使用FromSql并仍然在服务器端运行它?@Phil我不建议使用客户机评估。但是在2.x中,这些操作符没有选择。在3.0中,它应该翻译并运行服务器端。对于支持的LINQ查询构造,它已经做到了这一点,但不确定不使用SQL的
是什么意思。通常我们不需要FromSql
。您可以针对您的DbSet编写原始SQL查询,并让它返回您需要的对象。这就是我如何在2.x中绕过当前工会限制的原因。该评论是对@Peter的回应,他提到在3.0发布之前启用本地评估,这是一个巨大的禁忌!如果您所做的只是q1.Union(q2.ToListAsync(),那么本地求值并没有什么坏处。我的问题是,我有q1.Union(q2).Where(x=>…)
,并且Union部分被转换为一个非常昂贵的执行查询(1000行中的许多10行,然后条件过滤掉)。最后,在尝试了各种解决方案后,我不得不做q1.Where(x=>…).Union(q2.Where(x=>…)
,比如q1中的id或q2中的id
,我无法开始工作。