我对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错误:无法将bool转换为int。
Func<Group, int> myFunc = g => g.UserId == id;错误:无法从System.Func转换为System.Linq.Expressions.Expression
我显然不太理解表达树,可以使用一些友好的指导。提前感谢您的任何见解。
发布于 2016-10-02 16:38:30
perdicate类型的参数Expression<Func<TEntity, bool>>是负责过滤的参数:
Expression<Func<Group, bool>> myFunc = u => u.UserId == id;您需要匹配<Group, bool>的签名而不是<Group, int>的签名。
最后的决定可以是:
var results = GetAll(someIndex, someMaxPage, x=> x.UserId, u => u.UserId == id);或者:
Expression<Func<Group, int>> myKeySelector = u => u.UserId;
Expression<Func<Group, bool>> myFilter = u => u.UserId == id;
var results = GetAll(someIndex, someMaxPage, myKeySelector, myFunc );https://stackoverflow.com/questions/39819203
复制相似问题