想实现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
public class OrderBy
{
List<post> posts = new List<post>();
public List<post > GtePost()
{
for (int i = 0, j=1000; i < 1000 ; i++, j--)
{
post p = new post();
p.Ty = i;
p.Uu=j;
p.UserName = "1";
posts.Add(p);
}
return posts;
}

/**//// <summary>
/// Func<post, TKey> 委托的实现
/// </summar排序的列y>
/// <param name="p"></param>
/// <returns> 可以动态设置排序的列</returns>
int testSelector(post p)
{
return p.Uu;
}
public IEnumerable<post> GetData()
{
GtePost();
return Sort<int>("", testSelector);
}
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;
}
}
UI:
void BindData()
{
OrderBy o = new OrderBy();
post p=new post ();
this.dataGridView1.DataSource = o.GetData().ToList<post>();
}如果需要很高的动态性,就只能动态创建Expression了
连续使用多次OrderBy方法就能对多个字段排序了