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 Entity
中,您应该使用provider
支持的query
中的方法将它们转换为expression tree
,以便在Data Base
侧运行。
默认情况下,所有提供程序都必须支持一些称为Canonical Functions
(此处阅读更多信息)的方法,并且您还可以将user defined function
和stored procedure
定义为edm functions
,以便在linq query
(此处阅读详细信息)和(此处)中使用。
此外,您还可以使用提供程序支持的方法,这些方法可以转换为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();
要实现这一点,您应该在lambda表达式之外转换文本框值。
您可以按如下方式使用AsEnumerable()
:
var record = context.enrollments.AsEnumerable().FirstOrDefault(row => row.userId == Convert.ToInt32(UserID) && row.classId == Convert.ToInt32(ClassID));