c# - EFCore 过滤具有包含和值列表的属性
问题描述
我正在尝试根据实体上特定字段中的搜索值列表过滤实体。
例如:
var searchValues = new List<string> { "abc", "xyz" };
var posts = Context.Posts
.Where(p => searchValues.Any(v => p.Title.Contains(v)))
.ToList();
这会生成异常“无法翻译 LINQ 表达式。要么以可翻译的形式重写查询,要么通过插入对 'AsEnumerable'、'AsAsyncEnumerable'、'ToList' 或ToListAsync'。
应用包含多个搜索值的过滤器的正确方法是什么?
解决方案
如果您在应该工作的位置之前将帖子转换为列表。
var posts = Context.Posts.ToList()
.Where(p => searchValues.Any(v => p.Title.Contains(v)));
这样,过滤器就不必翻译成 SQL(或您正在使用的任何数据库)。
问题是所有 Posts 数据都将被加载到内存中以生成列表。这可能会或可能不会接受,具体取决于帖子和数据库调用的数量。
推荐阅读
- javascript - 在文本中显示带有复选框值的多选下拉列表
- ruby-on-rails - 无法更改标签的字体颜色。Chartkick Ruby on rails
- grafana - 在 Helm 图表安装期间 grafana.ini 未拾取 LDAP 配置
- html - 如何让 HTML 容器适合单个子元素的宽度,同时限制另一个子元素的宽度?
- javascript - 使用node.js完成所有forEach循环后如何执行方法
- javascript - 如何使用 Tabulator 格式化标题选择的过滤器值?
- d3.js - 不能在多折线图 d3 上放置圆圈
- laravel - Laravel Pusher:让所有用户连接到 Presence Channel
- javascript - 无法绑定到“paint”,因为它不是 Angular 9 中带有 mapbox 的“mgl-layer”的已知属性
- reactjs - 组件的子组件不会被渲染