按属性子属性排序列表元素

时间:2015-01-08 14:35:12

标签: c# linq list

列表应该由属性排序,该属性是列表中对象的子属性。

pList = pList
        .OrderBy(x => x.GetType()
            .GetProperty(sortBasedValue)
            .GetValue(x, null))
        .ToList();

将对列表中的所有元素进行排序,但某些子元素具有多个属性。 已经尝试subitem.value作为sortBasedValue,但无效。

2 个答案:

答案 0 :(得分:1)

GetProperty将属性的名称作为参数,但您不能使用它来直接获取其属性的属性。你需要把它链起来。

Enumerable.Empty<object>()
    // looks from the naming its a private variable, 
    //so you might want to call it via , GetProperty("subitem", BindingFlags.NonPublic) 
    .OrderBy(x => 
    {
        var subitem = x.GetType().GetProperty("subitem").GetValue(x);
        return subitem.GetType().GetProperty("value").GetValue(subitem);
    })
    .ToList();

如果您有pList的类型,我建议您使用属性选择器Func<TObject, TPropertyToOrderBy>并将其提供给OrderBy

答案 1 :(得分:0)

您需要实现自定义IComparer并使用sort方法。

解决方案在C# Sort and OrderBy comparison