0

我使用下面的代碼,並試圖內使用命名方法LINQ到實體如何使用命名方法

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實體無法識別方法「布爾 GetByCustomerByLastName(客戶,System.String)」方法,和這種方法 不能被翻譯成表達商店。

如果我改變我的方法使用lambda如下,一切工作正常。

Customer FindCustomerByLastName(string lastname) 
{ 
    DataContext MyContext = new DataContext(); 
    return MyContext.Customers.Where(c => c.LastName == lastname).FirstOrDefault(); 
} 

是否有可能在上下文中我想要做的Linq-To-Entities中使用命名方法?

+0

你需要建立一個表達式,但這不是那麼簡單。看看這裏:http://msdn.microsoft.com/en-us/library/bb882637.aspx –

回答

2

Linq表達式中的代碼必須可轉換爲實際執行的環境。這是錯誤消息的這部分內容。

此方法無法轉換爲商店表達式。

Linq-to-Entities的「實體」部分不知道任何有關您的方法。我遇到了與Linq-to-SQL相同的問題,您必須使用SQL可以理解的代碼。

0

我不是100%確定,但我認爲問題在於,您(透明地)使用Linq2SQL。所以你查詢轉換爲SQL語句失敗,因爲SQL不能調用你的一些方法。另一方面,lambda表達式可以轉換爲SQL語句。