C# 将Lamdas的多个订单存储到列表中,以便以后执行

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;

我想将两个不同的排序表达式存储到列表中,然后使用OrderByLinq执行它

我有以下代码

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;
}