Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用字典<;字符串,字符串>;在EF Core LINQ中:。无法翻译任何内容_C#_Linq_Entity Framework Core - Fatal编程技术网

C# 使用字典<;字符串,字符串>;在EF Core LINQ中:。无法翻译任何内容

C# 使用字典<;字符串,字符串>;在EF Core LINQ中:。无法翻译任何内容,c#,linq,entity-framework-core,C#,Linq,Entity Framework Core,在EF Core中的LINQ查询中使用有什么诀窍吗 f.Filters属于Dictionary 当我运行此程序时,我得到: LINQ表达式 DbSet<MyItems>() .Where(f => f.ID == 1) .Where(f => f.Filters.Keys .Any()) 看起来EF不知道如何将dictionary属性及其键转换为SQL。f.过滤器是否由EF映射?是的,映射正确。它作为字符串存储在数据库中,但我在OnModelCreate中设置了一

在EF Core中的LINQ查询中使用
有什么诀窍吗

f.Filters
属于
Dictionary

当我运行此程序时,我得到:

LINQ表达式

DbSet<MyItems>()
 .Where(f => f.ID == 1)
 .Where(f => f.Filters.Keys
 .Any())

看起来EF不知道如何将dictionary属性及其键转换为SQL。
f.过滤器是否由EF映射?是的,映射正确。它作为字符串存储在数据库中,但我在OnModelCreate中设置了一个转换器,从string>DIction开始。如果我只是从EF查询中删除where子句,然后在事实发生后再执行,效果就很好了。由于某些原因,无法在实际的数据库查询中执行此操作。我希望=)再次出现-对EF核心内部进行更多的黑客攻击是您支持此类查询的唯一选项。或者使用,我认为,这将是一个更简单的选择。仅供参考,我认为这意味着您要将
aseneumerable
放在2个
调用之间,而不是第二个调用的内部。从它的发音来看,您需要某种类型的
,比如
查询,以便在SQL中执行该操作,可能是
f=>f.Filter.Contains(“我的键”)
或类似的内容。您不能在
Where
子句中使用转换的属性。转换是客户端的,EF不会将转换转换为SQL。
DbSet<MyItems>()
 .Where(f => f.ID == 1)
 .Where(f => f.Filters.Keys
 .Any())
var items = await _dbContext.MyItems
                .Where(f => f.ID == 1)
                .Where(f => f.Filters.Keys.AsEnumerable().Any( k => k == "My Key"))
                .ToListAsync();