如何将列表中的一系列项目移动到列表的末尾

时间:2015-03-31 22:26:35

标签: c# list

我想在屏幕底部显示用户客户端备注。我正在做的是将用户客户端笔记与其余笔记分开,然后再将它们添加到列表中。由于AddRange在最后添加了范围,所以我得到了我的预期。

var note1 = _notes.Where(n => n.NoteTypeID != (int)NoteTypes.User_Client_Note);
var note2 = _notes.Where(n => n.NoteTypeID == (int)NoteTypes.User_Client_Note);
_notes = new List<ProjectsActiveNote>();
_notes.AddRange(note1);
_notes.AddRange(note2);

我想知道是否有一种方法可以直接执行此操作。

2 个答案:

答案 0 :(得分:2)

您可以使用OrderBy

_notes = _notes.OrderBy(n => n.NoteTypeID != (int)NoteTypes.User_Client_Note ? 0 : 1).ToList();

基本上,它会首先放置不是用户客户端注释的注释,因为order by将为这些注释返回0,而其他注释将返回1。在我的测试中,它仍然保留了不同组中的顺序。

答案 1 :(得分:0)

没有办法进行&#34;小组移动&#34;就像在列表中一样。

但是,您可以编写一个以正确顺序返回元素的查询,甚至可以枚举它们并将它们存储在列表中(如果您愿意)。

var clientNotes = _notes.Where(n => n.NoteTypeID == (int)NoteTypes.User_Client_Note);
return notes.Execpt(clientNotes).Concat(clientNotes);

将按照您想要的顺序返回IEnumerable