gpt4 book ai didi

c# - 结合 OrderBy 表达式和 Where 表达式

转载 作者:太空狗 更新时间:2023-10-29 23:33:18 25 4
gpt4 key购买 nike

我发现以下问题可以组合多个 Expression<Func<T,bool>>表达式:

How to merge two C# Lambda Expressions without an invoke?

我想知道您是否使用类似的技术来合并 .OrderBy Expression<Func<Entity, Key>>与.Where Expression<Func<Entity, bool>>成一个类型的表达式,或继承自类型,System.Linq.Expressions.Expression .

我正在制作一个真正精简的 QueryProvider 类,用于 T => T == ... Func 通过公共(public)方法 .Where.OrderBy .这是为了将此类构建的表达式传递给 QueryTranslator 以创建合适的 SQL。

这种风格的 QueryTranslator,当从 QueryProvider 调用时,通常需要一个 System.Linq.Expressions.Expression作为参数,然后将其转换为 SQL。

我可以理解上面合并两个 .Where 的问题功能。以下博客文章对此特别有用,我跟踪了每个示例:

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 它是 Func<Entity, bool> 的情况下,在 .OrderBy 的情况下,它是一个 Func<Entity, Key> .

从表面上看,合并这两个表达式并不像合并具有相同通用参数的两个表达式那样简单。

内置的 Func-Expression-producing-engine(不确定确切的术语)能够将 .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

关于c# - 结合 OrderBy 表达式和 Where 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com