Union can't be translated to SQL

2019-07-26 20:54发布

问题:

I'm using EFCore 2.2.3 and I have disabled local evaluation.

I have the following queries

var query1 = companyContext.Companies.Where(c => c.Name == name);
var query2 = companyContext.Companies.Where(c => c.Id == 10);

If i execute them on their own they work correctly.

await query1.ToListAsync();
await query2.ToListAsync();

But if i try to

var result = await query1.Union(query2).ToListAsync();

i get the following error:

InvalidOperationException: Error generated for warning 'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning: The LINQ expression 'Union({from Company c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[MagliteTest.Database.Company]) where ([c].Id == 10) select [c]})' could not be translated and will be evaluated locally.'. This exception can be suppressed or logged by passing event ID 'RelationalEventId.QueryClientEvaluationWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'.

Is union not supported on entity framework core?

回答1:

Union / Concat server (SQL) translation is not supported yet (as of EF Core 2.x).

The issue is tracked by #6812 Query: Translate IQueryable.Concat/Union/Intersect/Except/etc. to server.

According to that link, it's scheduled for EF Core 3.0.