【发布时间】:2015-06-18 17:02:54
【问题描述】:
我想通过用户定义的 Where 调用过滤IEnumerable<ModuleItem>(因此表达式由字符串对象给出)
到目前为止,我可以使用此代码使用 DynamicLinq 创建过滤器
Expression<Func<ModuleItem, bool>> expr = System.Linq.Dynamic.DynamicExpression.ParseLambda<ModuleItem, bool>(value, null);
问题在于,如果对集合中的某个项目的评估失败,则整体过滤将失败。所以我想在 lambda 中捕获异常并返回 false 来过滤掉失败的项目。
我尝试用TryExpression.TryCatch(...) 包装表达式,但我无法取回Expression<Func<ModuleItem, bool>>
如何包装我的动态表达式并取回 Expression<Func<ModuleItem, bool>> 对象以用作 Where 参数?
【问题讨论】:
-
你有一个
IEnumerable,而不是IQueryable,那么你为什么要处理表达式,而不仅仅是代表呢? -
你需要一个带有 return 语句的块。
-
我真的不在乎是表达式还是块。我在这里的约束是将表达式作为字符串并将其提供给 IEnumerable.Where 调用。