当我尝试做这样的事情时,我遇到了错误:
来自db.SomeDbSet中的s,其中IsValid选择s
错误告诉我它无法处理IsValid。
基本上,我尝试做的是根据链接的Where中的另一个dbSet进行过滤并执行任何操作,但它不会让我。
我已尝试过百万种不同的方式来表达,但我无法找到正确的方法并构建我自己的扩展方法,例如在哪里似乎也无法正常工作。
谢谢!
答案 0 :(得分:0)
你可以粘贴你的IsValid功能吗?
在这种情况下,使用LINQ语法并将其转换为SQL语法是EF作业。 EF无法将您的功能转换为SQL。它只支持一定数量的具有明确SQL等效命令的函数。
您有两种选择:
1)将该功能重写为一系列受支持的表扬。这将变成一个SQL子查询,意味着单次访问数据库,例如:
// will only return records that have at least one related entity marked as full.
query.Where(m => m.ReletedEntities.Any(re => re.IsFull == true));
2)从数据库中获取所有数据,然后使用Linq,您的函数将使用数据。这将在内存中使用您的实际函数完成,该函数将为集合中的每个项目调用一次。您还必须加载相关的实体集合。或者它仍然是“转换为SQL查询的实体框架”,如果你使用你的函数将会失败。