.Net Core 3.1 Linq to SQL:在查询中列出

.NetCore 3.1 Linq to SQL : List within query

早期的 .NetCore 版本允许多种客户端评估策略,但从 .NetCore 3.1 开始,更严格的规则要求更新写得不好的查询。

考虑这个 LINQ 查询(使用 EntityFrameworkCore 3.1.0):

var searchTerms = new List<string>() { "breaking", "changes" };
var topicQuery = _repository.Query<Topic>()
    .Where(topic => searchTerms
        .Any(searchTerm => topic.Title.Contains(searchTerm)));

在运行时它会抛出评估异常,因为它无法翻译需要引入和迭代 searchTerms 的查询的内部部分。

如何重写他的查询(针对 .NetCore 3.1)而不必先从存储库中获取所有主题,同时仍将对 searchTerm 的测试保持在内循环中?

无需在每个 topic.title 上迭代 searchTerms,您可以只检查 searchTerms 是否包含 topic.Title。 可以重写查询以满足要求,例如

.Where(主题=>searchTerms.Contains(topic.Title))