读书人

问个拉姆达表达式排序有关问题

发布时间: 2013-05-02 09:39:29 作者: rapoo

问个拉姆达表达式排序问题
如何根据我传过来的参数进行排序呢?????

List<ROOMREPORT> roomreports = new List<ROOMREPORT>();

ROOMREPORT是个类,有七八个属性

我想根据我传过来的参数,返回这个集合排序后的集合

但是因为属性太多,也不能一个个if来判断把

求大家帮帮看看

roomreports.OrderBy(r => r.DOCUMENT_NUM)

DOCUMENT_NUM这个想换成参数的形式能做到吗???
[解决办法]
用反射:
http://blog.csdn.net/q107770540/article/details/6133484
[解决办法]
EX:

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


[解决办法]
roomreports.OrderBy(r => r.GetType().GetProperty("要排序的属性名").GetValue(t,null));
[解决办法]
引用:
roomreports.OrderBy(r => r.GetType().GetProperty("要排序的属性名").GetValue(t,null));

最后那个t应该是r,写错了

读书人网 >asp.net

热点推荐