国产探花免费观看_亚洲丰满少妇自慰呻吟_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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉善右旗| 乐平市| 东海县| 五河县| 那坡县| 山西省| 博乐市| 吴旗县| 云阳县| 平乐县| 阿坝县| 墨脱县| 钦州市| 清镇市| 林州市| 东海县| 资中县| 高陵县| 江北区| 名山县| 庆阳市| 杭锦后旗| 清流县| 商城县| 古丈县| 台南县| 贞丰县| 娱乐| 个旧市| 九寨沟县| 道孚县| 连城县| 茶陵县| 扎赉特旗| 宝丰县| 临邑县| 岱山县| 白水县| 辉县市| 吴忠市| 丰台区|