私はLinq式を初めて使用しています。Linq式ツリーとフィルタリングロジック
私は、次のオーバーロードされたメソッドを公開している、APIを呼び出しています:
CustomPaging<TEntity> GetAll(int index, int maxPage, Expression<Func<TEntity, int>> keySelector, OrderBy orderBy = OrderBy.Ascending);
CustomPaging<TEntity> GetAll(int index, int maxPage, Expression<Func<TEntity, int>> keySelector, Expression<Func<TEntity, bool>> predicate, OrderBy orderBy, params Expression<Func<TEntity, object>>[] useProperties)
私の意図は、渡された値でフィルタリングするために、述語の一部として「ID」パラメータを渡すことです。
の線に沿って何か:
x => x.UserId.Equals(id)
私の質問は - それは、このフィルタリングを実現する方法、APIのメソッドシグネチャから、決定することが可能でしょうか?
私は無駄に以下のバリエーションを渡すと周り果たしている:私は明らかに非常によく、式ツリーを理解していない
Expression<Func<Group, int>> myFunc = u => u.UserId == id
Error: Cannot convert bool to int.
Func<Group, int> myFunc = g => g.UserId == id;
Error: Cannot convert from System.Func to System.Linq.Expressions.Expression
といくつかの友好を使用することができますガイダンス。あらゆる洞察に感謝します。
Joseph AlbahariのPredicate Builderを見てください。 http://www.albahari.com/nutshell/predicatebuilder.aspx –
'u.UserId == id'はブール値を返し、' Expression> 'は' int'戻り値の型を予期します。 'keySelector'はフィルタリングを担当するパラメータではなく、' predicate'という次のパラメータです。 –
user3185569