如何使用命名方法

时间:2012-10-15 13:40:02

标签: c# entity-framework entity-framework-4 linq-to-entities dbcontext

我正在使用以下代码并尝试在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中的命名方法?

2 个答案:

答案 0 :(得分:2)

Linq表达式中的代码必须可以转换为实际执行的环境。这就是错误信息的这一部分的含义。

  

此方法无法转换为商店表达式。

"实体" Linq-to-Entities的一部分对您的方法一无所知。我在Linq-to-SQL中遇到了同样的问题,你必须使用SQL理解的代码。

答案 1 :(得分:0)

我不是100%肯定,但我认为问题是,你(透明地)使用Linq2SQL。因此,您将查询转换为失败的SQL语句,因为SQL无法调用您的某些方法。另一方面,lambda表达式可以转换为SQL语句。