sql-server - 为什么我的 Entity Framework 创建多个查询而不是单个 UNION 查询?

标签 sql-server entity-framework ef-core-2.0

我使用 Entity Framework Core 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();
}

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

SELECT I.*
    FROM [dbo].[Items]
    WHERE I.ItemType = N'A'
UNION
SELECT I.*
    FROM [dbo].[Items]
    WHERE I.ItemType = N'B'

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

查询1:

SELECT I.*
    FROM [dbo].[Items]
    WHERE I.ItemType = N'A'

查询2:

SELECT I.*
    FROM [dbo].[Items]
    WHERE I.ItemType = N'B'

这两个单独查询的结果稍后由 Entity Framework 合并。但它是在调用代码中完成的,而不是在 SQL Server 端完成的。

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

最佳答案

根据this GitHub issue EF Core 2.0.1 中尚未实现服务器端 UNION。 服务器端 UNION 计划在 EF Core v.2.1 中实现,届时 EF 将执行本地 Union(在内存中)。

关于sql-server - 为什么我的 Entity Framework 创建多个查询而不是单个 UNION 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49597645/

相关文章:

c# - 映射到嵌套类

sql - 如何删除 MS SQL 数据库中最旧的一周(期间)?

.net - MVC3 与 EF 4.1 和 EntityState.Modified 更新

c# - EF Core 2.1 启动缓慢

sql - 如何有条件地为 SQL CREATE TABLE 语句构造表名?

C#在单独的线程中连接到数据库

c# - 如何使用 EF Core 2.1 和 Pomelo 创建 CreatedOn 和 UpdatedOn

c# - 实体核心 2.0.3 异常 : must be reducible node

c# - 如何首先使用 EF 4 代码重构代码/数据库模式 - 数据迁移

c# - 使用 distance() 方法进行空间 Linq 查询