gpt4 book ai didi

c# - 具有多个值的 Entity Framework 核心 where 子句

转载 作者:行者123 更新时间:2023-12-03 21:50:57 26 4
gpt4 key购买 nike

我有一个字段很少的表 Person 是它。我想在一次通话中从数据库中找到多个人,而不需要放置很多“或”。当我尝试以下查询时,出现此错误。

var list = new List<string>(){"John", "Adam", "Bill", "David"};
context.People.Where(p=>list.Any(l=>l == p.Name)).ToList();
错误信息:

System.InvalidOperationException: 'The LINQ expression 'DbSet.Where(p => __list_0.Any(l => l == p.Name))' could not be translated. Either rewrite the query in a form that can be translated, or switch toclient evaluation explicitly by inserting a call to eitherAsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). Seehttps://go.microsoft.com/fwlink/?linkid=2101038 for more information.'


我想我的查询无法翻译,但还有其他方法吗?
提前致谢!

最佳答案

解决方案是使用一个可以翻译成 SQL 的函数,

var list = new List<string>(){"John", "Adam", "Bill", "David"};
var matchingPeople = context.People.Where(p=>list.Contains(p.Name)).ToList();
List<string>.Contains()被翻译成 SQL IN (values)句子。
备注 :正如@MongZhu 指出的那样,在 Entity Framework Core 3.0 there is a bug 中在那个翻译和 IEnumerable.Contains()必须改用。该错误已在 3.1 中解决

关于c# - 具有多个值的 Entity Framework 核心 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62911553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com