我正在创建一个使用Lambda/LINQ for dynamic where和orderby的概念证明。以下代码适用于where表达式,但我无法弄清楚如何通过表达式创建顺序。对于这个例子,如果可能的话,我想保持简单;我宁愿不编写修改表达式树的代码。为LINQ/Lambda创建OrderBy表达式
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,30,0));
Expression<Func<Products, bool>> filter = d => d.CreatedDate > productSince && d.Price < 100 ;
Expression<Func<Products, ????>> orderBy = d => ??????;
List<Products> products = GetProducts(filter, orderBy, Products);
Console.WriteLine(products);
}
private static List<Products> GetProducts(Expression<Func<Products, bool>> filter,
Expression<Func<Products, ???>> orderBy, Table<Products> Products)
{
var products = Products.Where(filter).OrderBy(orderBy);
return products.ToList();
}
如果您想知道,我正在使用LinqPad进行此类概念验证。
感谢您的回答,但我如何参考TOrderBy? – 2011-04-23 19:10:51
你不这样做,它被orderBy参数使用。 'Expression> orderBy' –
2011-04-23 19:12:40
为了帮助他人。要创建orderBy表达式,可以使用'Expression> orderBy = d => d.Price;'。价格是十进制类型。在前面的代码中,小数可以是任何类型,例如DateTime,string或int。此类型需要匹配从expresion返回的类型。如果使用DateTime,则lambda表达式应该是d.CreatedDate之类的东西。 –
2011-04-23 19:26:52