现在的位置: 首页 > 综合 > 正文

linq动态排序解决方法

2011年11月01日 ⁄ 综合 ⁄ 共 1390字 ⁄ 字号 评论关闭

linq动态排序不是很好实现的,很多开发者都在这个方面有疑惑,所以笔者今天分享一下自己的经验,希望能给大家带来帮助。

想实现linq动态排序就是linq的order by 后跟动态的函数可以用委托实现,但是发现实现委托函数时候:

  1. int testSelector(post p)  
  2. {  
  3.    ret urn p.Uu;  
  4. }  

这个返回类型受到了限制仅是相同类型的字段可以动态排序是不是Func selector 这个的实现我理解的有问题 ?

  1. public IEnumerable Sort(string userName, Func 
  2. selector)  
  3.       {  
  4.           return from post in posts  
  5.                  where post.UserName == userName  
  6.                  orderby selector(post) descending  
  7.                  select post;  
  8.       }   

这个函数的TKey限制只能是一种类型 ?有什么好的实现吗?

linq动态排序具体解决的代码

  1. public   class OrderBy  
  2. {   
  3.   List posts = new List();  
  4.   public List  GtePost()  
  5.   {  
  6.     for (int i = 0, j=1000; i < 1000 ; i++, j--)  
  7.      {  
  8.         post p = new post();  
  9.         p.Ty = i;  
  10.         p.Uu=j;  
  11.         p.UserName = "1";  
  12.         posts.Add(p);  
  13.      }  
  14.    return posts;  
  15.   }  
  16.      
  17. /**////   
  18.   /// Func 委托的实现  
  19.   ///   
  20.  ///  
  21.   ///  可以动态设置排序的列 
  22. int testSelector(post p)  
  23. {  
  24.     return p.Uu;  
  25. }  
  26.  public  IEnumerable GetData()  
  27.     {  
  28.        GtePost();  
  29.        return Sort<int>("", testSelector);  
  30.     }  
  31. public IEnumerable Sort(string userName, Func
  32.  TKey> selector)  
  33.   {  
  34.      return from post in posts  
  35.      where post.UserName == userName  
  36.      orderby selector(post) descending  
  37.      select post;  
  38.   }  
  39. }  

linq动态排序Code

  1. void BindData()  
  2.   {  
  3.       OrderBy o = new OrderBy();                     
  4.       post p=new post ();  
  5.       this.dataGridView1.DataSource = o.GetData().ToList();               
  6.   } 

以上就是对linq动态排序解决方法的简单介绍。

 

 

抱歉!评论已关闭.