Linq表达树和过滤逻辑

时间:2016-10-02 16:37:08

标签: c# linq-expressions

我是Linq Expressions的新手。

我正在调用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

我显然不太了解表达树,可以使用一些友好的指导。提前感谢任何见解。

1 个答案:

答案 0 :(得分:0)

类型http://localhost/phpmyadmin/的参数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);