在EF Core的LINQ查询中使用.Any
有什么技巧吗?
f.Filters
的类型为Dictionary<string, string>
var items = await _dbContext.MyItems
.Where(f => f.ID == 1)
.Where(f => f.Filters.Keys.Any( k => k == "My Key"))
.ToListAsync();
当我运行这个程序时,会得到以下结果:
LINQ表达式
DbSet<MyItems>()
.Where(f => f.ID == 1)
.Where(f => f.Filters.Keys
.Any())
无法翻译。请将查询重写为可翻译的形式,或切换到客户端评估。
通过插入对AsEnumerable()、AsAsyncEnumerable()、ToList()或ToListAsync()之一的调用来显式转换。有关更多信息,请参见https://go.microsoft.com/fwlink/?linkid=2101038。
我尝试按照文档添加了AsEnumerable
,但似乎没有什么作用:
例如:
var items = await _dbContext.MyItems
.Where(f => f.ID == 1)
.Where(f => f.Filters.Keys.AsEnumerable().Any( k => k == "My Key"))
.ToListAsync();
AsEnumerable
放在两个Where
调用之间,而不是放在第二个调用内部。从听起来的声音来看,你需要一些类型的Like
查询才能在 SQL 中完成,可能是f => f.Filter.Contains("My Key")
或类似的东西。 - undefinedWhere
子句中不能使用转换后的属性。转换是在客户端进行的,EF不会将转换操作翻译成SQL语句。 - undefined