我正在使用以下代码并尝试在Linq-To-Entities中使用命名方法
Customer FindCustomerByLastName(string lastname)
{
DataContext MyContext = new DataContext();
return MyContext.Customers.Where(c => GetByCustomerByLastName(c,lastname) == true).FirstOrDefault();
}
bool GetByCustomerByLastName(Customer Cust, string LastName)
{
if (Cust.LastName == LastName)
return true;
else
return false;
}
但是这会在运行时给出以下错误。
LINQ to Entities无法识别方法'布尔值 GetByCustomerByLastName(Customer,System.String)'方法,以及此方法 方法无法转换为商店表达式。
如果我改变我的方法以使用lambda,如下所示,一切正常。
Customer FindCustomerByLastName(string lastname)
{
DataContext MyContext = new DataContext();
return MyContext.Customers.Where(c => c.LastName == lastname).FirstOrDefault();
}
是否可以在我想要的上下文中使用Linq-To-Entities中的命名方法?
答案 0 :(得分:2)
Linq表达式中的代码必须可以转换为实际执行的环境。这就是错误信息的这一部分的含义。
此方法无法转换为商店表达式。
"实体" Linq-to-Entities的一部分对您的方法一无所知。我在Linq-to-SQL中遇到了同样的问题,你必须使用SQL理解的代码。
答案 1 :(得分:0)
我不是100%肯定,但我认为问题是,你(透明地)使用Linq2SQL。因此,您将查询转换为失败的SQL语句,因为SQL无法调用您的某些方法。另一方面,lambda表达式可以转换为SQL语句。