Entity framework core 工会可以';无法转换为SQL

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(); 但是如果

我正在使用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 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
,我无法开始工作。