加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为LINQ / Lambda创建一个OrderBy表达式

发布时间:2020-12-15 06:47:09 所属栏目:百科 来源:网络整理
导读:我正在创建一个概念证明,它使用Lambda / LINQ来进行动态的和orderby.以下代码适用于where表达式,但我无法弄清楚如何通过表达式创建顺序.对于这个例子,如果可能,我想保持简单;我宁愿不编写修改表达式树的代码. void Main(){ DateTime productSince = DateTime
我正在创建一个概念证明,它使用Lambda / LINQ来进行动态的和orderby.以下代码适用于where表达式,但我无法弄清楚如何通过表达式创建顺序.对于这个例子,如果可能,我想保持简单;我宁愿不编写修改表达式树的代码.
void Main()
{
    DateTime productSince = DateTime.UtcNow.Subtract(new TimeSpan(1,30,0));
    Expression<Func<Products,bool>> filter = d => d.CreatedDate > productSince && d.Price < 100 ;    
    List<Products> products = GetProducts(filter,Products);
    Console.WriteLine(products);
}

private static List<Products> GetProducts(Expression<Func<Products,bool>> filter,Table<Products> Products)
{

    var products = Products.Where(filter);
    return products.ToList();
}

我想要的是类似于以下内容,但无法弄清楚通过表达式创建顺序的代码.

void Main()
{
    DateTime productSince = DateTime.UtcNow.Subtract(new TimeSpan(1,bool>> filter = d => d.CreatedDate > productSince && d.Price < 100 ;
    Expression<Func<Products,????>> orderBy = d => ??????;

    List<Products> products = GetProducts(filter,orderBy,Expression<Func<Products,???>> orderBy,Table<Products> Products)
{

    var products = Products.Where(filter).OrderBy(orderBy);
    return products.ToList();
}

如果你想知道,我使用LinqPad这个概念证明.

解决方法

private static List<Products> GetProducts<TOrderBy>(Expression<Func<Products,TOrderBy>> orderBy,Table<Products> Products)
{

    var products = Products.Where(filter).OrderBy(orderBy);
    return products.ToList();
}

如果你看到OrderBy扩展方法,它接受一个表达式< Func< T,TOrderBy>>因为表达式可能导致任何类型的依赖

.OrderBy(x => x.ID) // <T,int>
.OrderBy(x => x.Name) // <T,string>

因此,您的包装方法需要能够接受通用类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读