LINQ to Entities 无法识别方法“Int32 Parse(System.String)"方法,并且该方法无法转换为存储表达式 [英] LINQ to Entities does not recognize the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression

查看:41
本文介绍了LINQ to Entities 无法识别方法“Int32 Parse(System.String)"方法,并且该方法无法转换为存储表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用实体框架,并且我有一行代码正在获取一个 var 并将其转换回数据库的 iint.

I am using Entity Framework, and I have a line of code that is taking a var and translating it back to an iint for the database.

var record = context.enrollments.SingleOrDefault
  (row => row.userId == int.Parse(UserID) && row.classId == int.Parse(ClassID));

每当我尝试运行它时,我都会收到 rhis 错误.LINQ to Entities 无法识别方法 'Int32 Parse(System.String)' 方法,并且该方法无法转换为存储表达式."

Whenever I try to run it I receive rhis error. "LINQ to Entities does not recognize the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression."

我也试过了

 var record = context.enrollments.FirstOrDefault
  (row => row.userId == Convert.ToInt32(UserID) 
  && row.classId == Convert.ToInt32(ClassID));

我收到的只是这条错误消息,LINQ to Entities 无法识别方法 'Int32 ToInt32(System.String)' 方法,并且此方法无法转换为存储表达式

and all I receive is this error message, "LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression

最后我也尝试了这个,我知道这很不寻常,但在过去类似的情况下它也有效.

and finally I have tried this as well, which I know is unusual, but it has worked in the past for similar situations.

var record = context.enrollments.SingleOrDefault
  (row => row.userId == CommonDLL.Sanitize<int>.ConvertType(UserID) 
  && row.classId == CommonDLL.Sanitize<int>.ConvertType(ClassID));

我在其中收到此错误.如您所见,我尝试了几种不同的方法,但没有任何效果,所以任何帮助都会很棒.

In which I get this error. As you can see I have tried seveal different things and nothing is working, so any help would be great.

推荐答案

Linq to Entity 中,您应该使用 query 中支持的方法code>provider 将它们转换为 expression tree 以在您的 Data Base 端运行.

in Linq to Entity, you should use the methods in your query which is supported by your provider to convert them to expression tree to run on your Data Base side.

默认情况下,所有提供程序都必须支持某些称为 Canonical Functions 的方法(在这里阅读更多),您也可以将用户定义函数存储过程定义为edm函数 用于 linq 查询 (在这里阅读更多)和(在这里).

all providers must support some methods by default called Canonical Functions (Read More Here), and also you can define your user defined function and stored procedure as edm functions to use in linq query (Read More Here) and (Here).

此外,您可以使用提供程序支持的方法,并且可以转换为 EntityFunctionsSqlFunctions.

in addition you can use methods which is supported by providers and can be converted to expression tree which are in EntityFunctions and SqlFunctions.

最后关于您的问题,您可以在查询之前转换 UserIDClassID,如下所示:

and finally about your question, you can convert UserID and ClassID before your query, like this:

var UID = int.Parse(UserID);
var CID = int.Parse(ClassID);
var record = context.enrollments.SingleOrDefault
    (row => row.userId == UID && row.classId == CID);

这篇关于LINQ to Entities 无法识别方法“Int32 Parse(System.String)"方法,并且该方法无法转换为存储表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆