列表应该由属性排序,该属性是列表中对象的子属性。
pList = pList
.OrderBy(x => x.GetType()
.GetProperty(sortBasedValue)
.GetValue(x, null))
.ToList();
将对列表中的所有元素进行排序,但某些子元素具有多个属性。
已经尝试subitem.value
作为sortBasedValue
,但无效。
答案 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方法。