按属性子属性排序列表元素
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
。
列表应按属性排序,该属性是列表中对象的子属性。
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
。