linq 实现动态 orderby

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排序  何问起 hovertree.com
       //这时我们就要用到动态排序:
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
        */
}  /* 何问起 hovertree.com */
private static object GetPropertyValue(object obj, string property)
{
    System.Reflection.PropertyInfo propertyInfo=obj.GetType().GetProperty(property);
    return propertyInfo.GetValue(obj, null);
} 

推荐:http://www.cnblogs.com/roucheng/p/dushubiji.html

时间: 2024-10-14 20:34:34

linq 实现动态 orderby的相关文章

C# linq查询 动态OrderBy

groupList是原始数据集合,List<T> sortOrder是排序类型,desc 或者asc sortName是排序属性名称 1.使用反射. private static object GetPropertyValue(object obj, string property) { System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property); return propertyInfo.G

Linq语句 动态组建

1 public override System.Linq.Expressions.Expression<Func<I_Position_Access, bool>> GetWhereLambda(I_Position_Access t) 2 { 3 ParameterExpression parameter = Expression.Parameter(typeof(I_Position_Access), "b");//创建参数b 4 System.Linq.

linq contain和orderby

var data = from px in db.vw_ygpx // orderby px.ygid descending select px; if (!string.IsNullOrEmpty(key)) { key = key.Trim(); // data = data.Where(d => d.ygmc.Contains(key) || d.gh.Contains(key)); data = from d in data where d.ygmc.Contains(key) || d

【转】关于LinQ的动态Or查询

/// <summary> /// 构造函数使用True时:单个AND有效,多个AND有效:单个OR无效,多个OR无效:混合时写在AND后的OR有效 /// 构造函数使用False时:单个AND无效,多个AND无效:单个OR有效,多个OR有效:混合时写在OR后面的AND有效 /// </summary> public static class PredicateExtensions { public static Expression<Func<T, bool>&

Linq 动态查询排序

Linq的排序一般是这样写的: query.OrderBy(x => x.Tel).Skip(0).Take(10); 实际使用中排序字段可能是通过字符类型的参数来设置的,于是想这样实现: query.OrderBy(x=>x.GetType().GetField("Tel")).Skip(0).Take(10); 上面的写法是无法编译通过的,此路不通,于是找到一个order扩展类: 1 using System; 2 using System.Linq; 3 using

zTree初体验--MVC linq动态多条件OR查询

工作需要,使用zTree实现了一个点击显示下拉复选框列表选中项作为查询条件的功能.简单记录下菜鸟级开发历程. zTree:是一个依靠jQuery实现的多功能树控件.通过简单引用配置就可使用. 具体使用: (1).脚本.样式引用 注意:引用顺序,zTree.js一定放最后. <link rel="stylesheet" href="@Url.Content("~/Scripts/jquery.plugins/zTree/zTreeStyle.css")

C#解决Linq OrderBy() 失效的小技巧

前言 前几天的一个数据列表中我用了Linq GroupBy 和OrderBy. 排序在本机正常使用,发到测试后排序死活不对,很是郁闷,总以为是程序问题.于是请教了另外一个同事.有了以下的答案. 问题原因和解决方法 因为服务器装的是英文版操作系统,没有中文包,所以碰见中文排序无法识别,所以使用OrderBy时需要单独处理下. CultureInfo culture = CultureInfo.GetCultureInfo("zh-cn"); List<TeamDto> tea

.NET深入解析LINQ框架(一:LINQ优雅的前奏)

阅读目录: 1.LINQ简述 2.LINQ优雅前奏的音符 2.1.隐式类型 (由编辑器自动根据表达式推断出对象的最终类型) 2.2.对象初始化器 (简化了对象的创建及初始化的过程) 2.3.Lambda表达式 (对匿名方法的改进,加入了委托签名的类型推断并很好的与表达式树的结合) 2.4.扩展方法 (允许在不修改类型的内部代码的情况下为类型添加独立的行为) 2.5.匿名类型 (由对象初始化器推断得出的类型,该类型在编译后自动创建) 2.6.表达式目录树(用数据结构表示程序逻辑代码) 3.LINQ

.NET深入解析LINQ框架(三:LINQ优雅的前奏)

阅读目录: 1.动态LINQ查询(动态构建Expression<T>表达式树) 2.DLR动态语言运行时(基于CLR之上的动态语言运行时) 1].动态LINQ查询(动态构建Expression<T>表达式树) 什么是动态LINQ查询?LINQ的编写是静态的,因为C#是基于静态类型系统原理设计的,在编写时已经确定类型,也就是在编译时就已经知道将要执行什么样的查询,条件是什么.排序方式是什么等等.那么很大一部分应用场合中我们需要根据用户的选择来查询数据源,以往我们都是通过判断的方式来拼