.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))
早期的 .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))