我有一个桌子人是几个字段。我想在一次呼叫中从数据库中找到多个人,而无需放置很多“ OR”。当我尝试以下查询时,出现此错误。
var list = new List<string>(){"John", "Adam", "Bill", "David"};
context.People.Where(p=>list.Any(l=>l == p.Name)).ToList();
错误消息:
System.InvalidOperationException:'LINQ表达式'DbSet 哪里(p => __list_0 .Any(l => l == p.Name))'无法翻译。以可以翻译的形式重写查询,或切换到 通过插入对其中任何一个的调用来明确评估客户 AsEnumerable(),AsAsyncEnumerable(),ToList()或ToListAsync()。看到 https://go.microsoft.com/fwlink/?linkid=2101038了解更多信息。'
我猜我的查询无法翻译,但是还有其他方法吗?
谢谢!
答案 0 :(得分:3)
该解决方案使用的功能可以转换为SQL,
load_workbook(xl_path, data_only = True)
var list = new List<string>(){"John", "Adam", "Bill", "David"};
var matchingPeople = context.People.Where(p=>list.Contains(p.Name)).ToList();
被翻译成SQL List<string>.Contains()
语句。
注意:正如@MongZhu所指出的那样,在Entity Framework Core 3.0 there is a bug中,必须使用翻译和 IN (values)
。该错误已在3.1中解决
答案 1 :(得分:1)
您是否尝试将.Any()
替换为.Contains()
?像这样:
var list = new List<string>(){"John", "Adam", "Bill", "David"};
context.People.Where(p => list.Contains(p.Name)).ToList();