0

次のような単純なLINQクエリを作成しようとしています。

var query = from o in entities.Orders   
        select new Order
        {
            Firstname = o.FirstName,
            Lastname = GetName()
        };    

ここでは、FirstNameをデータベースから取得し、Lastnameを別のソースから提供したいと思います。これを実行すると、例外が発生します。「LINQ to Entitiesは、メソッド'System.String GetName()'メソッドを認識せず、このメソッドをストア式に変換できません。」

LINQクエリに独自のメソッドを追加するにはどうすればよいですか?

4

2 に答える 2

2

他の方法で問題を解決する必要があります。通常は 2 つのプロジェクションに分割します。1 つは SQL に変換されてデータベース サーバーで実行され、もう 1 つはクライアントで実行されます。

var query =
    from o in
        (from o in entities.Orders
         select new
         {
             o.FirstName,
         }).AsEnumerable()
    select new Order
    {
        Firstname = o.FirstName,
        Lastname = GetName()
    };    

注: 結果は ではなく、IQueryable追加する可能性のあるフィルタリングまたは並べ替えは、クライアントでも実行されます。

于 2012-07-11T10:09:02.407 に答える
1

そのクエリは SQL に変換され、SQL サーバー上で実行されるため、独自のメソッドを Linq to entities クエリに追加することはできません。許可される唯一のカスタム メソッドは、マップされた SQL 関数またはモデル定義関数 (EDMX 内で定義された ESQL 関数) のいずれかである必要があります。

Linq クエリで .NET メソッドを実行する場合は、最初に Linq-to-entities クエリから結果を具体化 (SQL を実行) し、アプリケーションで実行される Linq-to-objects クエリを続行する必要があります。

于 2012-07-11T10:08:36.177 に答える