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 functionstored procedure作为edm functionslinq query ( 在这里阅读 )和( Here )中使用。

此外,您可以使用供应商支持的方法,并可将其转换为EntityFunctions和SqlFunctions中的 expression tree

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

 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式之外转换你的文本框的值。