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> 因此,您的包装方法需要能够接受通用类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |