Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Sql server 查询必须满足哪些条件才能转换为SQL server?_Sql Server_Linq_Asp.net Core_Linq To Sql_Entity Framework Core - Fatal编程技术网

Sql server 查询必须满足哪些条件才能转换为SQL server?

Sql server 查询必须满足哪些条件才能转换为SQL server?,sql-server,linq,asp.net-core,linq-to-sql,entity-framework-core,Sql Server,Linq,Asp.net Core,Linq To Sql,Entity Framework Core,将我的ASP.NET Core 2.2应用程序迁移到ASP.NET Core 3.0后,我继续遇到问题 这一次,以前正常工作的Linq到SQL查询现在失败了,表单除外: The LINQ expression 'blahblah' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inser

将我的ASP.NET Core 2.2应用程序迁移到ASP.NET Core 3.0后,我继续遇到问题

这一次,以前正常工作的Linq到SQL查询现在失败了,表单除外:

The LINQ expression 'blahblah' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
太好了,所以我去了

我在那里读什么?以前的3.0版本用于接受无法在服务器上计算的查询,但现在大多数情况下不再如此,而且:

如果EF Core在顶级投影之外的任何位置检测到无法转换到服务器的表达式,则会引发运行时异常。请参阅以了解EF Core如何确定无法转换到服务器的内容

哦,还有一个链接。好,我们来关注一下:

数据库提供程序标识可以在数据库中计算查询的哪些部分

!!!我应该能够在这个链接下阅读如何确定哪些内容不能翻译到服务器,以便我可以正确修改我的查询

好吧,我只知道数据库提供者决定了这一点。这对我还是没有帮助

老实说,我认为这个特定的查询可以很好地转换为SQL,因为它归结为几个数字的比较(有点复杂)(有很多括号和括号之间的
|
s和
&&
s)

因此,为了可读性和代码重用,查询使用了三种辅助方法,其中两种是在模型类中定义的属性,将这些数字分组为两个元组和一个枚举。。。但是,算了吧,枚举转换成整数,元组知道它的长度,所以比较它们很容易简化为比较它们的元素,等等

嗯,事情似乎不是那么好,相反,我必须做一些/全部:

  • 删除帮助器方法,将其代码复制粘贴到查询中
  • 手动解包元组
  • 手动将枚举转换为整数(模型实例定义了一个枚举!)
我如何知道以上哪项是必要的

我如何知道我必须如何构造我的查询以避免遇到这样的问题

查询必须满足哪些条件才能翻译成db语言?

有一个功能比较表

也可能是相关的


一种选择可能是将EF与ASP.NET核心目标.NET Framework一起使用

本教程是

请注意,虽然这将是ASP.NET核心,但不再是.NET核心

要使用EntityFramework6,您的项目必须根据.NETFramework进行编译,因为EntityFramework6不支持.NETCore


有一件事对于所有查询提供程序都是肯定的——自定义(帮助器)方法无法转换。请记住,查询转换器无法访问源代码,因此不知道自定义方法在其中执行什么操作。对于未映射(助手)属性也是如此。@IvanStoev Oops,这很难。复制粘贴有时是复杂条件下的唯一选择吗?看起来像是可读性和可维护性的噩梦!没错。但事实就是这样。该解决方案需要表达式组合,但C#编译器也没有帮助。一些第三方库正试图解决它,比如,NeinLinq和类似的问题。@IvanStoev可能是
private IQueryable AddCondition(IQueryable query)=>query.Where(st=>st.SomeMappedProp以我的理解:问题不在于我的项目依赖于在3.0中删除的某些功能。相反,问题在于我认为我的项目的某些部分正在工作,而它没有工作,只是2.2(有点)在3.0抛出时默默地忽略了这一点。你能分享这个表达式吗?