日期:2014-05-17  浏览次数:20608 次

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

 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 +