我有两个班,可以是孩子。
RMTerm和RMFile。 RMTerm列表可以包含RMTerm和RMFile
好吧,我想两次对此列表进行排序。
首先,在我的列表中,首先是RMFile项目,然后是RMTerm项目
我做到了。
_term.Childs = _term.Childs.OrderBy(o => o.GetType().Name).ToList();
但是在列表中之后,RMFile有一个不同类的子项,我需要按这些子属性排序。
_term.Childs.OfType<RMFile>().OrderBy(o => o.Childs.All(a => a.Properties["ActiveStatus"]
.Equals("C"))).ToList();
ActiveStatus属性可以是O,C或R.我想排序,如果所有孩子的ActiveStatus都是&#34; C&#34;那么这个RMFile项必须是列表的末尾。如果RMFile的一个孩子不是&#34; C&#34;然后它必须比RMFile更顶级或更远,它完全&#34; C&#34;孩子。
此代码似乎没问题
_term.Childs.OfType<RMFile>().OrderBy(o => o.Childs.All(a => a.Properties["ActiveStatus"]
.Equals("C"))).ToList();
但问题是如何与前一个结合起来。因为Childs可以是RMTerm或RMFile。
我很快就需要做一些像
这样的事情_term.Childs = _term.Childs.OrderBy(o => o.GetType().Name).OfType<RMFile>()
.ThenBy(o => o.Childs.All(a => a.Properties["ActiveStatus"].Equals("C"))).ToList();
但我不能这样做,因为施放物品
更新:
我是这样做的,但我对这段代码不满意
var fileList= _term.Childs.Where(r => r.GetType() == typeof(RMFile))
.OrderBy(o => o.Childs.All(a => a.Properties["ActiveStatus"].Equals("C"))).ToList();
_term.Childs.RemoveAll(r => r.GetType() == typeof(RMFile));
_term.Childs.AddRange(fileList);
_term.Childs = _term.Childs.OrderBy(o => o.GetType().Name).ToList();