C# 将Lamdas的多个订单存储到列表中,以便以后执行
我想将两个不同的排序表达式存储到列表中,然后使用OrderByLinq执行它 我有以下代码C# 将Lamdas的多个订单存储到列表中,以便以后执行,c#,.net,linq,C#,.net,Linq,我想将两个不同的排序表达式存储到列表中,然后使用OrderByLinq执行它 我有以下代码 class Product { public int Id { get; set; } public String Name {get; set;} } List<?> GetSortExpressions() { Expression<Func<Product, int>> idSortExpression= p => p.Id;
class Product
{
public int Id { get; set; }
public String Name {get; set;}
}
List<?> GetSortExpressions() {
Expression<Func<Product, int>> idSortExpression= p => p.Id;
Expression<Func<Product, String>> nameSortExpression = p => p.Name;
List<?> sorts = new List<?>();
sorts.Add(idSortExpression);
sorts.Add(nameSortExpression );
return sorts;
}
类产品
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
列出GetSortExpressions(){
表达式idSortExpression=p=>p.Id;
表达式名称或表达式=p=>p.Name;
列表排序=新列表();
sorts.Add(idSortExpression);
添加(nameSortExpression);
返回排序;
}
然后我想对IQueryable对象执行排序列表,如下所示
IQueryable<T> ApplySortExpressions(IQueryable<T> data, List<?> sorts) {
for(int i=0;i < sorts.Count; i++) {
if(i == 0) {
data = data.OrderBy(sorts[i]);
} else {
data = ((IOrderedQueryable<T>)data).ThenBy(sorts[i]);
}
}
return data;
}
IQueryable ApplySortExpressions(IQueryable数据、列表排序){
for(int i=0;i
由于类型错误,我无法将表达式添加到列表中。你们能给我下一行的通用类型列表吗
List<?> sorts = new List<?>();
列表排序=新列表();
提前感谢。您可以创建“表达式”类型的列表,然后您应该能够将两个表达式存储在同一列表中,但是,您必须在ApplySortExpressions方法中将表达式转换回所需的类型,否则无法在OrderBy或ThenBy方法中使用它们您可以将它们存储为
表达式>
。然后,您的功能变成:
List<Expression<Func<Product, object>>> GetSortExpressions() {
Expression<Func<Product, object>> idSortExpression = p => p.Id;
Expression<Func<Product, object>> nameSortExpression = p => p.Name;
var sorts = new List<Expression<Func<Product, object>>>();
sorts.Add(idSortExpression);
sorts.Add(nameSortExpression);
return sorts;
}
列出GetSortExpressions(){
表达式idSortExpression=p=>p.Id;
表达式名称或表达式=p=>p.Name;
var sorts=新列表();
sorts.Add(idSortExpression);
添加(nameSortExpression);
返回排序;
}
及
IQueryable ApplySortExpressions(IQueryable数据、列表排序){
for(int i=0;i
什么不起作用???请参阅更新的问题
IQueryable<T> ApplySortExpressions<T>(IQueryable<T> data, List<Expression<Func<T, object>>> sorts) {
for (int i = 0; i < sorts.Count; i++) {
if (i == 0) {
data = data.OrderBy(sorts[i]);
}
else {
data = ((IOrderedQueryable<T>) data).ThenBy(sorts[i]);
}
}
return data;
}