我正在使用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));
我收到此错误。正如你所看到的,我已经尝试了不同的东西,没有任何工作,所以任何帮助都会很棒。
答案 0 :(得分:20)
Linq to Entity
中,您应该使用query
支持的provider
方法将这些方法转换为expression tree
以在Data Base
上运行侧。
默认情况下,所有提供商都必须支持一些名为Canonical Functions
(Read More Here)的方法,您也可以将user defined function
和stored procedure
定义为edm functions
在linq query
(Read More Here)和(Here)。
此外,您可以使用提供商支持的方法,并且可以转换为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);
答案 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));