我想从派生类中对基类中的公共列表进行排序 每个派生类按不同的属性排序。
因此我使用this想法:传递相关属性以对基类列表进行排序。
protected void SortBy( Func<MyBaseClass, IComparable> getProp)
{
if (BaseClassList != null && BaseClassList .Count > 0)
{
BaseClassList = BaseClassList
.OrderBy(x => getProp(x))
.ToList();
}
}
并通过SortBy(x => x.GetTop);
好吧,现在我想按几个属性排序;对于每个其他已发送的属性,应将ThenBy
表达式添加到方法主体。
BaseClassList = BaseClassList
.OrderBy(x => getProp(x))
.ThenBy(x => x.getOtherProp)
.ToList();
由于我不知道将发送多少属性,我想使用params
的想法
但是,我知道自“The parameter array must be a single dimensional array
”以来这是不可能的。
有什么想法吗?
答案 0 :(得分:0)
这样的事情应该有效:
public static List<T> SortBy<T>(IEnumerable<T> data, Func<T, IComparable> sort, params Func<T, IComparable>[] details )
{
var result = data.OrderBy(x => sort(x));
foreach(var detail in details)
{
result = result.ThenBy(x => detail(x));
}
return result.ToList();
}
请注意我修改它以使用任何列表和任何数据类型。您必须使用BaseClassList
作为第一个参数来调用它,然后从返回值中再次写回结果:
BaseClassList = SortBy(BaseClassList, x => x.GetTop, x => x.GetSecondValue, x => x.GetThirdValue);