国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#linq查詢動態OrderBy

2019-11-14 16:09:23
字體:
來源:轉載
供稿:網友

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;   } 

 

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥棱县| 临邑县| 翼城县| 黎城县| 宁城县| 晴隆县| 霍林郭勒市| 莒南县| 福建省| 泾阳县| 茶陵县| 博客| 弋阳县| 达日县| 泰州市| 镶黄旗| 高州市| 南溪县| 大悟县| 砀山县| 乌兰察布市| 桂东县| 温宿县| 凤庆县| 黄浦区| 马关县| 西藏| 哈尔滨市| 二手房| 呼伦贝尔市| 房山区| 潞城市| 临桂县| 楚雄市| 封开县| 朝阳区| 桐乡市| 海阳市| 五华县| 方城县| 都兰县|