Linq之动态排序(字符传入)

static   class  Program  
{                                                                                                                                                                                       
    
static   void  Main( string [] args)                                                          
                                                                                             
    {                                                                                        
                                                                                             
        
string [] array  =  {  " aaa " " bb " " c "  };                                               
                                                                                             
        
foreach  (var item  in  array.AsQueryable().OrderBy( " Length " ))                          
                                                                                             
        {                                                                                    
                                                                                             
            Console.WriteLine(item);                                                         
                                                                                             
        }                                                                                    
                                                                                             
        Console.ReadLine();                                                                  
                                                                                             
    }                                                                                        
                                                                                             
                                                                                             
                                                                                             
    
public   static  IQueryable < T >  OrderBy < T > ( this  IQueryable < T >  query,  string  prop)            
                                                                                             
    {                                                                                        
                                                                                             
        var member 
=   typeof (T).GetProperty(prop);                                            
                                                                                             
        
return  (IQueryable < T > ) typeof (Program)                                                
                                                                                             
            .GetMethod(
" OrderByCore " , BindingFlags.Static  |  BindingFlags.NonPublic)          
                                                                                             
            .MakeGenericMethod(
typeof (T), member.PropertyType)                               
                                                                                             
            .Invoke(
null new   object [] { query, member });                                   
                                                                                             
    }                                                                                        
                                                                                             
                                                                                             
                                                                                             
    
private   static  IQueryable < T >  OrderByCore < T, TMember > (IQueryable < T >  query, MemberInfo memb
                                                                                             
    {                                                                                        
                                                                                             
        ParameterExpression item;                                                            
                                                                                             
        
return  query.OrderBy < T, TMember > (Expression.Lambda < Func < T, TMember >> (                
                                                                                             
            Expression.MakeMemberAccess(item 
=  Expression.Parameter( typeof (T),  " item " ), membe
                                                                                             
    }                                                                                        
                                                                                             
}                                                                                            

 

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

转载于:https://www.cnblogs.com/leeolevis/archive/2010/07/13/1776509.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值