LINQ to Entities不识别方法';Int32分析(System.String)';方法,而此方法

本文关键字:方法 String System 此方法 分析 Entities to LINQ Int32 识别 | 更新日期: 2023-09-27 17:59:21

我使用的是实体框架,我有一行代码正在获取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));

我在其中得到了这个错误。正如你所看到的,我已经尝试了几种不同的方法,但都不起作用,所以任何帮助都会很好。

LINQ to Entities不识别方法';Int32分析(System.String)';方法,而此方法

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

默认情况下,所有提供程序都必须支持一些称为Canonical Functions(此处阅读更多信息)的方法,并且您还可以将user defined functionstored procedure定义为edm functions,以便在linq query(此处阅读详细信息)和(此处)中使用。

此外,您还可以使用提供程序支持的方法,这些方法可以转换为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();

要实现这一点,您应该在lambda表达式之外转换文本框值。

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

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