「LINQ 式ノード タイプ 'Invoke' は LINQ to Entities ではサポートされていません」 - 困惑! 質問する

「LINQ 式ノード タイプ 'Invoke' は LINQ to Entities ではサポートされていません」 - 困惑! 質問する

EF では、Linq クエリの一部として使用される匿名関数を渡そうとしています。関数は INT を渡し、BOOL を返します (u.RelationTypeId は INT です)。以下は、関数の簡略版です。

public IEnumerable<UserBandRelation> GetBandRelationsByUser(Func<int, bool> relation)
{
    using (var ctx = new OpenGroovesEntities())
    {
        Expression<Func<UsersBand, bool>> predicate = (u) => relation(u.RelationTypeId);

        var relations = ctx.UsersBands.Where(predicate);

        // mapping, other stuff, back to business layer
        return relations.ToList();
    }
}

しかし、上記のエラーが発生します。関数から述語を構築することで、すべてが正しく行われているように見えます。何かアイデアはありますか? ありがとうございます。

ベストアンサー1

私はまさにこのエラーが発生しており、Entity Frameworkを使用しています述語ビルダーJoe Albahari による動的where句の構築方法。同じ状況に陥った場合は、次のAsExpandableメソッドを呼び出す必要があります。

クエリを実行する場合エンティティフレームワーク最後の行を次のように変更します。

return objectContext.Products.AsExpandable().Where(predicate);

このメソッドは、取得できるLINQKIT DLLの一部です。ここまたはNuGetパッケージを通じてここ

今はすべて正常に動作しています。:)

おすすめ記事