时间:2021-05-19
本文实例讲述了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();//herevar tmpList = groupQueryList.OrderBy(sortName, sortOrder);需要如下扩展方法:
public static IOrderedQueryable<T> OrderByDescending<T>(this IQueryable<T> source, string property){ return ApplyOrder<T>(source, property, "OrderByDescending");}public static IOrderedQueryable<T> ThenBy<T>(this IOrderedQueryable<T> source, string property){ return ApplyOrder<T>(source, property, "ThenBy");}public static IOrderedQueryable<T> ThenByDescending<T>(this IOrderedQueryable<T> source, string property){ return ApplyOrder<T>(source, property, "ThenByDescending");}static IOrderedQueryable<T> ApplyOrder<T>(IQueryable<T> source, string property, string methodName) { string[] props = property.Split('.'); Type type = typeof(T); ParameterExpression arg = Expression.Parameter(type, "x"); Expression expr = arg; foreach(string prop in props) { // use reflection (not ComponentModel) to mirror LINQ PropertyInfo pi = type.GetProperty(prop); expr = Expression.Property(expr, pi); type = pi.PropertyType; } Type delegateType = typeof(Func<,>).MakeGenericType(typeof(T), type); LambdaExpression lambda = Expression.Lambda(delegateType, expr, arg); object result = typeof(Queryable).GetMethods().Single( method => method.Name == methodName && method.IsGenericMethodDefinition && method.GetGenericArguments().Length == 2 && method.GetParameters().Length == 2) .MakeGenericMethod(typeof(T), type) .Invoke(null, new object[] {source, lambda}); return (IOrderedQueryable<T>)result;}希望本文所述对大家的C#程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#使用linq查询大数据集的方法。分享给大家供大家参考。具体如下:usingSystem;usingSystem.Collections.Gen
摘要:本文介绍Linq查询基本操作(查询关键字)-from子句-where子句-select子句-group子句-into子句-orderby子句-join子句
本文实例分析了C#中var关键字用法。分享给大家供大家参考。具体方法如下:C#关键字是伴随着.NET3.5以后,伴随着匿名函数、LINQ而来,由编译器帮我们推断
下面以linqtosql的实例介绍notin查询和in查询,linq的用法类似。 一、T-SQL的INSelectProductID,ProductNam
本文实例讲述了C#使用linq语句查询数组中以特定字符开头元素的方法。分享给大家供大家参考。具体如下:下面的代码查询数组中以字母k开头的元素usingSyste