0

LINQKitを使用して LINQ To Entities 機能を拡張しています。

public Boolean IsMatched(Int32 age)
{
    return age > 18;
}

public IQueryable<Users> GetAllMatchedUsers(Func<Int32, Boolean> isMatched)
{
    return qry = _Context.Users.AsExpandable().Where(x => x.IsActive && isMatched(x.Age));
}

このコードは、Entity Framework ORMオブジェクトに使用されます (_Context はDbContext、Users - はDBSet ) 。

このコードは次の例外をスローします

タイプ 'System.Linq.Expressions.FieldExpression' のオブジェクトをタイプ 'System.Linq.Expressions.LambdaExpression' にキャストできません

Funcを取り除き、 IsMatchedGetAllMatchedUsersにハードコーディングすると、この問題が解決します。しかし、Funcを使用して、ビジネス ロジック層からデータ アクセス層にさまざまな選択基準を渡す必要があります。

PS IsMatchedは、もちろん非常に単純化された実現です。

お願い助けて。

4

1 に答える 1

1

LinqKit を使用すると、合格する必要がありますExpression<Func<Int32, Boolean>> isMatched

Func<...>既に C# ランタイムにコンパイルされているものです。

Expression<Func<...>>式ツリーとして SQL に転送できるものです。

于 2016-09-04T21:08:33.047 に答える