1

我正在尝试根据实体上特定字段中的搜索值列表过滤实体。

例如:

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'。

应用包含多个搜索值的过滤器的正确方法是什么?

4

1 回答 1

1

如果您在应该工作的位置之前将帖子转换为列表。

var posts = Context.Posts.ToList()
.Where(p => searchValues.Any(v => p.Title.Contains(v)));

这样,过滤器就不必翻译成 SQL(或您正在使用的任何数据库)。

问题是所有 Posts 数据都将被加载到内存中以生成列表。这可能会或可能不会接受,具体取决于帖子和数据库调用的数量。

于 2021-01-30T16:37:31.590 回答