首页 > 解决方案 > EF Core 复杂的 where 子句

问题描述

EF Core 3.1 在运行以下查询时抛出,抱怨它无法为其生成正确的 SQL。

var searchPatterns = new string[] { "a", "b", "c" };

var matches = from entity in _dbContext.Entity
              where searchPatterns.Any(x => entity.Column1.Contains(x))
              select entity;

在原始 sql 中,这可以转化为类似

select * from entity
where exists (select x from @SearchPatterns where entity.column1 like '%:' + x + '%'))

(其中@SearchPatterns是保存记录ab和的表参数c

如何重写查询以使 EF Core 能够接受它?

编辑我正在构建的实际查询比我上面介绍的简化版本复杂得多。因此,我不考虑FromSqlRaw()作为我愿意使用的选项。

标签: sqlef-core-3.1

解决方案


您可以使用原始 sql。请参阅:原始 SQL 查询

var blogs = context.Blogs
    .FromSqlRaw("SELECT * FROM dbo.Blogs")
    .ToList();

更多内容:执行原始 SQL 查询

此处描述了其他选项:EF Core 3.x - LINQ 查询中包含的重大更改不再在客户端上进行评估


推荐阅读