EF Core 复杂的 where 子句
Posted
技术标签:
【中文标题】EF Core 复杂的 where 子句【英文标题】:EF Core complex where clause 【发布时间】:2021-01-22 06:53:18 【问题描述】: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
是一个表参数,其中包含记录a
、b
和c
)
如何重写查询以使 EF Core 能够接受它?
编辑 我正在构建的实际查询比我上面介绍的简化版本要复杂得多。因此,我不会考虑将FromSqlRaw()
作为我愿意使用的选项。
【问题讨论】:
【参考方案1】:您可以使用原始 sql。见:Raw SQL Queries
var blogs = context.Blogs
.FromSqlRaw("SELECT * FROM dbo.Blogs")
.ToList();
更多信息:Executing Raw SQL Queries
此处描述了其他选项:Breaking changes included in EF Core 3.x - 不再在客户端上评估 LINQ 查询。
【讨论】:
感谢您的回答尝试。为了更清楚地提出我的问题,我从我的查询中删除了所有不相关的部分。因此,实际上,查询要复杂得多。而且我不确定我是否想以原始 sql 将其全部发送到 EF。 @romar,看看here。 再次感谢。您是否确认我仅有的两个选项是使用客户端评估或原始 sql? AFAIK,是的 +FromSqlInterpolated
,在 MSDN 文档中提到。
谢谢。那么,我会相信你的话。以上是关于EF Core 复杂的 where 子句的主要内容,如果未能解决你的问题,请参考以下文章
实体框架:Count() 在大型 DbSet 和复杂的 WHERE 子句上非常慢