Ant*_*ony 5 c# linq expression linq-expressions
我找到了以下可以组合多个Expression<Func<T,bool>>表达式的问题:
我想知道,使用类似的技术,你是如何将.OrderBy Expression<Func<Entity, Key>>与.Where 合并Expression<Func<Entity, bool>>为一个类型的表达式,或继承类型,System.Linq.Expressions.Expression.
我正在做一个真正的削减QueryProvider风格类采取T => T == ...Func键的通过公共的方法.Where和.OrderBy.这是为了将此类构建的表达式传递给QueryTranslator以创建合适的SQL.
从QueryProvider调用时,此样式的QueryTranslator通常将一个System.Linq.Expressions.Expression作为参数,然后转换为SQL.
我可以通过并理解上面的问题来合并两个.WhereFunc.以下博客文章对此特别有用,我追溯了每个示例:
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组合时,两者具有不同的泛型参数.在.的情况下,它是一个Func<Entity, bool>,而在.OrderBy的情况下,它是一个Func<Entity, Key>.
从表面上看,合并这两个表达式并不像使用相同的泛型参数合并两个表达式那样简单.
内置的Func-Expression生成引擎(不确定术语)能够将.Where Func与.OrderBy Func结合起来.当这两个表达式合并成一个时,我很好奇发生了什么System.Linq.Expressions.Expression.是否有可能,如果是这样,你将如何去结合的Expression<Func<Entity, bool>>用Expression<Func<Entity,Key>>假设的实体是在每个表达式相同类型的?
public IQueryable<T> ApplyExpressions<T, TKey>(
Expression<Func<T, TKey>> sortBy,
Expression<Func<T, bool>> filterBy,
IQueryable<T> source)
{
return source.Where(filterBy).OrderBy(sortBy);
}
IQueryable<Customer> query = ApplyExpressions<Customer, int>(
c => c.Age,
c => c.Name.StartsWith("B"),
myDC.Customers)
Expression queryExpression = query.Expression; //tada
Run Code Online (Sandbox Code Playgroud)