动态Linq排序不能用于数组列表

本文关键字:数组 列表 用于 不能 Linq 排序 动态 | 更新日期: 2023-09-27 18:04:42

我正在尝试做以下事情

string orderedBy = "item.length";
    var sorted = from PPart item in partList
                 orderby orderedBy
                 select item;

其中partList是包含PPart类型对象的数组列表。上面的语句不是对arrayList进行排序。

如果我写项目。长度直接在linq查询中,如下所示,那么列表将排序

 var sorted = from PPart item in partList
                             orderby item.length
                             select item;

如何使动态linq工作与后期绑定

动态Linq排序不能用于数组列表

您可以使用表达式树来做到这一点,例如:

    public static Func<PPart, IComparable> GetOrderByPropertyExpression(string propertyName)
    {
        ParameterExpression parameter = Expression.Parameter(typeof (PPart));
        PropertyInfo baseProperty = typeof (PPart).GetProperty(propertyName);
        Expression memberExpression = Expression.Property(parameter, baseProperty);
        return
            Expression.Lambda<Func<PPart, IComparable>>(Expression.TypeAs(memberExpression, typeof (IComparable)),
                                                        parameter).Compile();
    }

并按如下方式使用:

IOrderedEnumerable<PPart> ordered = partList.OrderBy(PPart.GetOrderByPropertyExpression("length"));

不提供错误检查,只是一个概念。