首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq表达式树与过滤逻辑

Linq表达式树与过滤逻辑
EN

Stack Overflow用户
提问于 2016-10-02 16:37:07
回答 1查看 156关注 0票数 0

我对Linq的表达很陌生。

我正在调用一个API,它公开了以下重载的方法:

代码语言:javascript
复制
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“参数作为谓词的一部分,以便通过传递的值进行筛选。

与…有关的东西:

代码语言:javascript
复制
x => x.UserId.Equals(id)

我的问题--从API的方法签名中可以确定如何实现这种过滤吗?

我玩过以下几种变体的传递,但都没有用:

代码语言:javascript
复制
 Expression<Func<Group, int>> myFunc = u => u.UserId == id

错误:无法将bool转换为int。

代码语言:javascript
复制
Func<Group, int> myFunc = g => g.UserId == id;

错误:无法从System.Func转换为System.Linq.Expressions.Expression

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-02 16:38:30

perdicate类型的参数Expression<Func<TEntity, bool>>是负责过滤的参数:

代码语言:javascript
复制
Expression<Func<Group, bool>> myFunc = u => u.UserId == id;

您需要匹配<Group, bool>的签名而不是<Group, int>的签名。

最后的决定可以是:

代码语言:javascript
复制
var results = GetAll(someIndex, someMaxPage, x=> x.UserId, u => u.UserId == id);

或者:

代码语言:javascript
复制
Expression<Func<Group, int>> myKeySelector = u => u.UserId;
Expression<Func<Group, bool>> myFilter = u => u.UserId == id;
var results = GetAll(someIndex, someMaxPage, myKeySelector, myFunc );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39819203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档