自定义排序根据C#中的自定义类

时间:2017-03-27 07:58:28

标签: c# sorting

我有两个班,可以是孩子。

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();

0 个答案:

没有答案