【发布时间】:2016-08-12 16:24:03
【问题描述】:
我有以下表达:
public Expression<Func<T, bool>> UserAccessCheckExpression<T>(int userId) where T : class
{
return x => (IsAdmin || userId == CurrentUserId || userId == 0);
}
然后我想将此过滤器应用于多个集合(IQueryable),例如:
return tasks
.Where(t => t.TaskUsers
.Any(x => UserAccessCheckExpression<TaskUser>(x.User) && x.SomeBool == true));
执行此操作时出现以下错误:
错误 40 无法将类型
System.Linq.Expressions.Expression<System.Func<TaskUser,bool>>隐式转换为bool
我不能使用接口继承的解决方法(例如 TaskUser 继承具有 int UserId 属性的接口(其中 T : IHasUserId)),因为我想组合逻辑。
【问题讨论】:
-
您将不得不手动构建 Lambda,类似于以下内容:stackoverflow.com/questions/4001082/… 我没有足够的时间给出完整的答案。
-
您将需要使用来自here 的解决方案。然后你会写类似
t.TaskUsers.Any(UserAccessCheckExpression) -
您的 Linq 提供商是什么?是实体框架吗?你的表情中
IsAdmin和CurrentUserId是什么? -
@haim770,是英孚。它们是另一个类的属性。
-
@jeroenvanlangen 现在只是一个限制。
标签: c# linq expression iqueryable func