LINQ to Entities不识别方法'Int32 Parse(System.String)'方法,并且此方法不能被转换成存储expression式
我正在使用entity framework,我有一行代码正在采取一个变种,并将其翻译回数据库的iint。
var record = context.enrollments.SingleOrDefault (row => row.userId == int.Parse(UserID) && row.classId == int.Parse(ClassID));
每当我尝试运行它,我收到rhis错误。 “LINQ to Entities不识别'Int32 Parse(System.String)'方法的方法,而且这个方法不能被转换成存储expression式。
我也试过这个
var record = context.enrollments.FirstOrDefault (row => row.userId == Convert.ToInt32(UserID) && row.classId == Convert.ToInt32(ClassID));
和我收到的所有是这样的错误信息,“LINQ to Entities不能识别方法'Int32 ToInt32(System.String)'方法,并且此方法不能被转换成存储expression式
最后我也尝试了这个,我知道这是非常不寻常的,但是在类似的情况下,它已经起作用了。
var record = context.enrollments.SingleOrDefault (row => row.userId == CommonDLL.Sanitize<int>.ConvertType(UserID) && row.classId == CommonDLL.Sanitize<int>.ConvertType(ClassID));
我得到这个错误。 正如你所看到的,我尝试过不同的事情,没有任何工作,所以任何帮助都会很棒。
在Linq to Entity
,应该使用query
中由provider
支持的方法将它们转换为expression tree
以在Data Base
端运行。
所有提供者都必须支持一些默认称为Canonical Functions
( Readical Here )的方法,同时你也可以定义你的user defined function
和stored procedure
作为edm functions
在linq query
( 在这里阅读 )和( Here )中使用。
此外,您可以使用供应商支持的方法,并可将其转换为EntityFunctions和SqlFunctions中的 expression tree
。
最后关于你的问题,你可以在查询之前转换UserID
和ClassID
,如下所示:
var UID = int.Parse(UserID); var CID = int.Parse(ClassID); var record = context.enrollments.SingleOrDefault (row => row.userId == UID && row.classId == CID);
这适用于我:
var iId = int.Parse(TextBox1.Text); var item = db.Items.Where(p => p.ItemID == iId ).FirstOrDefault();
要做这个工作,你应该在lambdaexpression式之外转换你的文本框的值。