LINQ to Entities无法识别方法' Int32 Parse(System.String)'方法,并且此方法无法转换为商店表达式

时间:2014-04-22 04:42:24

标签: c# linq int entity int32

我正在使用Entity Framework,我有一行代码,它将var转换回数据库的iint。

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

每当我尝试运行它时,我都会收到此错误。 “LINQ to Entities无法识别方法'Int32 Parse(System.String)'方法,并且此方法无法转换为商店表达式。”

我也试过这个

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

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

最后我也尝试了这个,我知道这很不寻常,但它在过去也适用于类似情况。

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

我收到此错误。正如你所看到的,我已经尝试了不同的东西,没有任何工作,所以任何帮助都会很棒。

3 个答案:

答案 0 :(得分:20)

Linq to Entity

,您应该使用query支持的provider方法将这些方法转换为expression tree以在Data Base上运行侧。

默认情况下,所有提供商都必须支持一些名为Canonical FunctionsRead More Here)的方法,您也可以将user defined functionstored procedure定义为edm functionslinq queryRead More Here)和(Here)。

此外,您可以使用提供商支持的方法,并且可以转换为EntityFunctionsSqlFunctions中的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);

答案 1 :(得分:1)

这对我有用:

  var iId = int.Parse(TextBox1.Text);
 var item = db.Items.Where(p => p.ItemID == iId ).FirstOrDefault();

要完成这项工作,您应该将文本框值转换为lambda表达式之外的内容。

答案 2 :(得分:-1)

您可以按以下方式使用AsEnumerable()

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