• linq 实现动态 orderby(根据参数名排序)


    这是别人教的最后的最好方法:roomreports.OrderBy(r => r.GetType().GetProperty("要排序的属性名").GetValue(r,null));

    之前用的方法,用的是反射的方法:

    class Pet  
    {  
       public string Name{get;set;}  
       public int Age{get;set;}  
    }  
    void Main()  
    {   
          Pet[] pets = { new Pet { Name="Tim", Age=18 },  
                       new Pet { Name="Allen", Age=22 },  
                       new Pet { Name="Bill", Age=20  } };  
           
    //如果我们想根据Age进行排序  很容易想到这样来写:      
      var query= from p in pets  
                 orderby p.Age  
                 select p;  
                   
           
      query.ToList().ForEach(q=>Console.WriteLine(q.Name +"     "+q.Age));  
            /* 得到结果:  
            Tim     18 
            Bill    20 
            Allen   22 
            */  
              
    }  
    //但是有时项目内有多个排序条件 如有时要根据Name排序 有时要根据Age排序  
           //这时我们就要用到动态排序:  
    void Main()  
    {   
        Pet[] pets = { new Pet { Name="Tim", Age=18 },  
                       new Pet { Name="Allen", Age=22 },  
                       new Pet { Name="Bill", Age=20 } };  
        Console.WriteLine("Before Orderby:/r/n");         
        pets.ToList().ForEach(p=>Console.WriteLine(p.Name +"     "+p.Age));  
           
      var query= from p in pets  
                 orderby GetPropertyValue(p,"Age")    
                 select p;  
                   
        Console.WriteLine("/r/nAfter Orderby:/r/n");  
      query.ToList().ForEach(q=>Console.WriteLine(q.Name +"     "+q.Age));  
               /* 
            Before Orderby: 
            Tim     18 
            Allen   22 
            Bill    20 
            After Orderby: 
             
            Tim     18 
            Bill    20 
            Allen   22 
            */         
    }  
    private static object GetPropertyValue(object obj, string property)  
    {  
        System.Reflection.PropertyInfo propertyInfo=obj.GetType().GetProperty(property);  
        return propertyInfo.GetValue(obj, null);  
    }  
    

     这是论坛网友给出的解决方法:

    我这样调用:

    if (sortDirection == "ASC")
    {
    return roomreports.OrderBy(r => GetPropertyValue(r,sortColumn)).Skip(startIndex).Take(pageSize).ToArray();
    }
    else
    {
    return roomreports.OrderByDescending(r =>GetPropertyValue(r,sortColumn)).Skip(startIndex).Take(pageSize).ToArray();
    }

  • 相关阅读:
    C语言中for循环的使用
    详解C语言的main函数
    计算机语言的发展(the history of computer's language)
    hdu 1001
    hoj 1002
    hdu 1000
    POJ 1000(水题)
    hoj 1001
    code hunt题解(1)
    《C和指针》学习笔记(3)
  • 原文地址:https://www.cnblogs.com/wenghaowen/p/3045113.html
Copyright © 2020-2023  润新知