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.GetValue(obj, null);
} 

var resultList = sortOrder == "desc" ? groupList.OrderByDescending(p => GetPropertyValue(p, sortName)) : groupList.OrderBy(p => GetPropertyValue(p, sortName));

//linq方式:
//
var resultList1 = from p in groupList orderby GetPropertyValue(p, m.SortName) select p;

if (sortOrder == "desc")
    resultList1 = from p in groupList orderby GetPropertyValue(p, sortName) descending select p;

2.调用AsQueryable()

将泛型 System.Collections.Generic.IEnumerable<T> 转换为泛型 System.Linq.IQueryable<T>。

var groupQueryList = groupList.AsQueryable();//here
var tmpList = groupQueryList .OrderBy(sortName, sortOrder);

参考:http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet#41262

时间: 2024-10-29 10:46:41

C# linq查询 动态OrderBy的相关文章

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进行排序 很容易想到这样来写:

使用Expression Tree构建动态LINQ查询

这篇文章介绍一个有意思的话题,也是经常被人问到的:如何构建动态LINQ查询?所谓动态,主要的意思在于查询的条件可以随机组合,动态添加,而不是固定的写法.这个在很多系统开发过程中是非常有用的. 我这里给的一个解决方案是采用Expression Tree来构建. 其实这个技术很早就有,在.NET Framework 3.5开始引入.之前也有不少同学写过很多不错的理论性文章.我自己当年学习这个,觉得最好的几篇文章是由"装配脑袋"同学写的.[有时间请仔细阅读这些入门指南,做点练习基本就能理解]

.NET 3.5(5) - LINQ查询操作符之Select、Where、OrderBy、OrderByDescending

.NET 3.5(5) - LINQ查询操作符之Select.Where.OrderBy.OrderByDescending 介绍    ·Select - Select选择:延迟    ·Where - Where查询:延迟    ·OrderBy - 按指定表达式对集合正序排序:延迟    ·OrderByDescending - 按指定表达式对集合倒序排序:延迟    ·GroupBy - 分组:延迟    ·Join - Join查询:延迟    ·GroupJoin - 分组Join查

动态拼接LINQ 查询条件

本文章转载:http://www.cnblogs.com/wangiqngpei557/archive/2013/02/05/2893096.html 参考:http://dotnet.9sssd.com/entfwk/art/960 http://www.cnblogs.com/killuakun/archive/2008/08/03/1259389.html http://www.cnblogs.com/snowdream/archive/2008/07/18/1246308.html 以往

Linq学习之旅——LINQ查询表达式

1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述 LINQ的全称是Language Integrated Query,中文译成“语言集成查询”.LINQ作为一种查询技术,首先要解决数据源的封装,大致使用了三大组件来实现这个封装,分别是LINQ to Object.LINQ to ADO.NET.LINQ to XML.它们和.NET语言的关系如下:

NHibernate系列文章二十四:NHibernate查询之Linq查询(附程序下载)

摘要 NHibernate从3.0开始支持Linq查询.写Linq to NHibernate查询就跟写.net linq代码一样,非常灵活,可以很容易实现复杂的查询.这篇文章使用Linq to NHibernate重写之前所有的查询. 本篇文章的代码可以到NHibernate查询下载 1.创建IQueryable对象,返回所有Customer对象信息 1 public IList<Customer> QueryAllLinq() 2 { 3 return Session.Query<C

LINQ查询知识总结:案例分

案例:汽车表car,系列表brand,厂商表productor private MyCarDataContext  _Context = new MyCarDataContext(); (1)查询全部汽车信息 var list = _Context.Car; LINQ语法:var list = from p in _Context.Car select p; (2)简单筛选行:查询车系代号是 b002的所有车 关键点:"==" var list = _Context.Car.Where

C#语法之Linq查询基础二

上篇C#语法之Linq查询基础一基本把Linq介绍了一下,这篇主要是列举下它的几个常见用法. 在用之前先准备些数据,新建了两个类Student.Score,并通过静态方法提供数据. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinqDemo { public class Student {

C#LINQ 查询【学习笔记】

[LINQ 查询] 2016-10-24 事例: 先定义两个类Master和KongFu,然后在这两个类中定义变量 1 class Master 2 { 3 publicintId{ get;set;} 4 publicstringName{ get;set;} 5 publicintAge{ get;set;} 6 publicstringKongfu{ get;set;} 7 publicstringMenPai{ get;set;} 8 publicintLevel{ get;set;}