首页 新闻 会员 周边

LInq 动态排序

0
悬赏园豆:15 [已解决问题] 解决于 2008-10-30 16:08

想实现linq动态排序 就是linq的order by 后跟动态的函数 可以用委托实现

但是发现 实现委托函数时候

int testSelector(post p)
26      {
27          ret urn p.Uu;
28      }

这个返回类型 受到了限制 仅是相同类型的字段可以动态排序

是不是

Func<post, TKey> selector 这个的实现 我理解的有问题 ?

 

public IEnumerable<post> Sort<TKey>(string userName, Func<post, TKey> selector)
      {
          return from post in posts
                 where post.UserName == userName
                 orderby selector(post) descending
                 select post;
      }

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

 具体的代码

排序class


 1 public   class OrderBy
 2    
 3      List<post> posts = new List<post>();
 4
 5      public List<post >  GtePost()
 6      {
 7
 8          for (int i = 0, j=1000; i < 1000 ; i++, j--)
 9          {
10              post p = new post();
11              p.Ty = i;
12              p.Uu=j;
13              p.UserName = "1";
14              posts.Add(p);
15          }

16          return posts;
17
18      }

19        
20      /// <summary>
21      /// Func<post, TKey> 委托的实现
22      /// </summar排序的列y>
23      /// <param name="p"></param>
24      /// <returns> 可以动态设置排序的列</returns>

25      int testSelector(post p)
26      {
27          return p.Uu;
28      }

29     public  IEnumerable<post> GetData()
30      {
31          GtePost();
32          return Sort<int>("", testSelector);
33      }

34
35      public IEnumerable<post> Sort<TKey>(string userName, Func<post, TKey> selector)
36      {
37          return from post in posts
38                 where post.UserName == userName
39                 orderby selector(post) descending
40                 select post;
41      }

42    }

 

UI:


 1   void BindData()
 2        {
 3           
 4            OrderBy o = new OrderBy();      
 5                 
 6            post p=new post ();
 7
 8            this.dataGridView1.DataSource = o.GetData().ToList<post>();
 9           
10                
11        }
小潘的主页 小潘 | 初学一级 | 园豆:15
提问于:2008-10-12 16:42
< >
分享
最佳答案
0

如果需要很高的动态性,就只能动态创建Expression了

JimLiu | 菜鸟二级 |园豆:300 | 2008-10-12 21:11
其他回答(1)
-2

连续使用多次OrderBy方法就能对多个字段排序了

Gray Zhang | 园豆:17610 (专家六级) | 2008-10-12 17:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册