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)'メソッドを認識せず、このメソッドをストア式に変換できません。

次のようにラムダを使用するようにメソッドを変更すると、すべてが正常に機能します。

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ステートメントに変換されます。一方、ラムダ式はSQLステートメントに変換できます。

于 2012-10-15T13:46:39.623 に答える