sql - 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
是保存记录a
、b
和的表参数c
)
如何重写查询以使 EF Core 能够接受它?
编辑我正在构建的实际查询比我上面介绍的简化版本复杂得多。因此,我不考虑FromSqlRaw()
作为我愿意使用的选项。
解决方案
您可以使用原始 sql。请参阅:原始 SQL 查询
var blogs = context.Blogs
.FromSqlRaw("SELECT * FROM dbo.Blogs")
.ToList();
更多内容:执行原始 SQL 查询
此处描述了其他选项:EF Core 3.x - LINQ 查询中包含的重大更改不再在客户端上进行评估。
推荐阅读
- flutter - 在颤振的初始化程序中只能访问静态成员
- python - 具有不同窗口规范的链式火花列表达式产生低效的 DAG
- caching - 基于子域的 AWS CloudFront 缓存
- c - 为什么 time() 报告的时间有时比 C 代码中 timespec_get() 的秒组件慢 1 秒?
- angular - 服务中的值更改时无法重新加载角度组件
- functional-programming - 实现懒惰和记忆
- c# - 使用 BinaryPrimitives 填充字节缓冲区的首选方法?
- javascript - 我需要帮助为 html 文本字段创建动态值属性
- sql-server - 删除重复行 Sql-Server
- vue.js - 使用路由器链接打开新标签,但留在当前标签