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

Order list elements by properties sub properties

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

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

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

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

解决方法在这里C# Sort and OrderBy comparison

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