0

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

4

2 回答 2

2

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

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

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

于 2012-10-15T13:47:26.710 回答
0

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

于 2012-10-15T13:46:39.623 回答