• 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();
    }

  • 相关阅读:
    使用jquery的 $.grep实现es6的filter效果
    web移动前端页面,jquery判断页面滑动方向
    js for循环与for in循环的区别
    jq判断滚动条向上还是向下
    react中的hoc和修饰器@connect结合使用
    creat-react-app 如何在组件中img的src引入图片路径??
    react将字符串转义成html语句
    POJ 3905 Perfect Election (2-Sat)
    POJ 2296 Map Labeler (2-Sat)
    HDU Bomb Game 3622 (2-Sat)
  • 原文地址:https://www.cnblogs.com/wenghaowen/p/3045113.html
Copyright © 2020-2023  润新知