首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2013-05-02 
问个拉姆达表达式排序问题····如何根据我传过来的参数进行排序呢????? ListROOMREPORT roomreports ne

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

 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,写错了

热点排行