我发现以下可以组合多个Expression<Func<T,bool>>
表达式的问题:
如何在没有调用的情况下合并两个 C# Lambda 表达式?
我想知道是否使用类似的技术将 .OrderByExpression<Func<Entity, Key>>
与 .Where合并Expression<Func<Entity, bool>>
到一个类型的表达式中,或者从类型继承,System.Linq.Expressions.Expression
.
我正在制作一个非常精简的 QueryProvider 风格的类,用于T => T == ...
通过公共方法.Where
和.OrderBy
. 这是为了将此类构建的表达式传递给 QueryTranslator 以创建合适的 SQL。
这种风格的 QueryTranslator 在从 QueryProvider 调用时,通常将一个System.Linq.Expressions.Expression
作为参数,然后将其转换为 SQL。
我可以理解并理解上述合并两个.Where
Funcs 的问题。以下博客文章对此特别有用,我跟踪了每个示例:
http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx
这篇 CodeProject 文章也很有用:
http://www.codeproject.com/Articles/24255/Exploring-Lambda-Expression-in-C
但是,当将 .OrderBy Func 与 .Where Func 结合使用时,两者具有不同的通用参数。在 .Where 的情况下是 a Func<Entity, bool>
,在 .OrderBy 的情况下是 a Func<Entity, Key>
。
从表面上看,合并这两个表达式并不像合并两个具有相同通用参数的表达式那么简单。
内置的 Func-Expression-production-engine(不确定确切的术语)能够将 .Where Func 与 .OrderBy Func 结合起来。当这两个表达式合并为一个时,我很好奇引擎盖下会发生什么System.Linq.Expressions.Expression
。是否有可能,如果是这样,您将如何将 anExpression<Func<Entity, bool>>
与Expression<Func<Entity,Key>>
假设 Entity 在每个表达式中的类型相同?