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

天殇月痕 2013-04-26 04:00:44
如何根据我传过来的参数进行排序呢?????

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

ROOMREPORT是个类,有七八个属性····

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

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

求大家帮帮看看

roomreports.OrderBy(r => r.DOCUMENT_NUM)

DOCUMENT_NUM这个想换成参数的形式能做到吗???
...全文
191 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-04-26
  • 打赏
  • 举报
回复
C# 4.0的最佳做法: var param = Expression.Parameter(typeof(ROOMREPORT)); var lambda = Expression.Lambda(Expression.MakeMemberAccess(param, typeof(ROOMREPORT).GetProperty("要排序的属性名")), param); var query = roomreports.OrderBy(lambda.Compile() as Func<ROOMREPORT, string>); //假设属性是string类型
天殇月痕 2013-04-26
  • 打赏
  • 举报
回复
引用 7 楼 gxingmin 的回复:
roomreports.OrderBy(r => r.GetType().GetProperty("要排序的属性名").GetValue(t,null));
哇···更简洁明了,万分感谢了····
gxingmin 2013-04-26
  • 打赏
  • 举报
回复
引用 7 楼 gxingmin 的回复:
roomreports.OrderBy(r => r.GetType().GetProperty("要排序的属性名").GetValue(t,null));
最后那个t应该是r,写错了
gxingmin 2013-04-26
  • 打赏
  • 举报
回复
roomreports.OrderBy(r => r.GetType().GetProperty("要排序的属性名").GetValue(t,null));
天殇月痕 2013-04-26
  • 打赏
  • 举报
回复
引用 3 楼 q107770540 的回复:
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);
}
非常感谢~~可以实现!!!
  • 打赏
  • 举报
回复
引用 4 楼 whw6263989 的回复:
[quote=引用 1 楼 Mockqi 的回复:] 什么意思没看懂。。。 //查询DOCUMENT_NUM是你的参数的 roomreports.OrderBy(r => r.DOCUMENT_NUM==“你的参数”)
就是我想排序,排序的字段是参数~~~~ 参数是这个类的属性名(不是属性值) 我的意思是想要实现roomreports.OrderBy(r => r.参数)[/quote] 额 看错了 要使用属性名,只要用反射
天殇月痕 2013-04-26
  • 打赏
  • 举报
回复
引用 1 楼 Mockqi 的回复:
什么意思没看懂。。。 //查询DOCUMENT_NUM是你的参数的 roomreports.OrderBy(r => r.DOCUMENT_NUM==“你的参数”)
就是我想排序,排序的字段是参数~~~~ 参数是这个类的属性名(不是属性值) 我的意思是想要实现roomreports.OrderBy(r => r.参数)
q107770540 2013-04-26
  • 打赏
  • 举报
回复
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);
}
q107770540 2013-04-26
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
什么意思没看懂。。。 //查询DOCUMENT_NUM是你的参数的 roomreports.OrderBy(r => r.DOCUMENT_NUM==“你的参数”)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧