为什么我的实体框架会创建多个查询而不是单个 UNION 查询?

Dim*_*ima 4 sql-server entity-framework ef-core-2.0

我使用实体框架核心 2.0.1。在我的 EF 查询中,我需要将几个简单的查询组合成一个 UNION 查询。所以,对于一个非常基本的例子,我有几个类似的查询

using (var dbc = new ItemsDbContext("some-connection-string"))
{
    var q1 = dbc.Items.Where(a => a.ItemType == "A");
    var q2 = dbc.Items.Where(a => a.ItemType == "B");

    var myList = q1.Union(q2).ToList();
}
Run Code Online (Sandbox Code Playgroud)

我希望将这样的 SQL 语句作为单个查询对我的 SQL Server 数据库执行:

SELECT I.*
    FROM [dbo].[Items]
    WHERE I.ItemType = N'A'
UNION
SELECT I.*
    FROM [dbo].[Items]
    WHERE I.ItemType = N'B'
Run Code Online (Sandbox Code Playgroud)

但是,正如我在 SQL Server Profiler 中看到的那样,执行了两个单独的查询:

查询 1:

SELECT I.*
    FROM [dbo].[Items]
    WHERE I.ItemType = N'A'
Run Code Online (Sandbox Code Playgroud)

查询 2:

SELECT I.*
    FROM [dbo].[Items]
    WHERE I.ItemType = N'B'
Run Code Online (Sandbox Code Playgroud)

这两个单独查询的结果稍后由实体框架联合。但它是在调用代码中完成的,而不是在 SQL Server 一侧。

如何让 Entity Framework Core 生成 UNION 而不是多个查询?

Dim*_*ima 5

根据这个 GitHub 问题,服务器端 UNION 还没有在 EF Core 2.0.1 中实现。服务器端 UNION 计划在 EF Core v.2.1 中实现,到那时 EF 将执行本地联合(在内存中)。