12

我正在使用实体框架,并且我有一行代码正在获取一个 var 并将其转换回数据库的 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)' 方法,并且此方法无法转换为存储表达式。”

我也试过这个

 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));

我得到这个错误。如您所见,我尝试了几种不同的方法,但没有任何效果,因此任何帮助都会很棒。

4

3 回答 3

20

在中Linq to Entity,您应该使用您query支持的方法provider将它们转换expression tree为在您Data Base身边运行。

默认情况下,所有提供程序都必须支持一些称为Canonical Functions( Read More Here ) 的方法,您也可以定义您的user defined functionand stored procedureasedm functions以在linq query( Read More Here ) 和 ( Here ) 中使用。

此外,您可以使用提供者支持的方法,并且可以转换为expression treeEntityFunctionsSqlFunctions的方法。

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

var UID = int.Parse(UserID);
var CID = int.Parse(ClassID);
var record = context.enrollments.SingleOrDefault
    (row => row.userId == UID && row.classId == CID);
于 2014-04-24T16:06:19.207 回答
1

这对我有用:

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

为了使这项工作,您应该在 lambda 表达式之外转换您的文本框值。

于 2016-08-12T05:29:10.810 回答
-2

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

var record = context.enrollments.AsEnumerable().FirstOrDefault(row => row.userId == Convert.ToInt32(UserID) && row.classId == Convert.ToInt32(ClassID));
于 2020-09-24T11:56:03.567 回答