我有项目集合,每个项目都有int TypeId
属性。我需要对此集合中的项目进行重新排序(或获取新项目),其中项目是按顺序排序的,因此首先所有项目都为TypeId = 3
,然后是TypeId = 1
,然后是TypeId = 2
。
我的解决方案是:
var result = new List<A>();
result.AddRange(source.Where(i => i.TypeId == 3));
result.AddRange(source.Where(i => i.TypeId == 1));
result.AddRange(source.Where(i => i.TypeId == 2));
我想知道,有没有其他快速解决方案没有多次迭代source
集合(可能是一些LINQ技巧)?
答案 0 :(得分:3)
您只需创建一个订单序列数组,并在OrderBy语句中使用它,只需询问索引即可。这是伪逻辑(我不记得IndexOf是否可用于本机数组,但如果不是只使用其他集合类型)
int[] order = new int[] { 3, 1, 2};
source.OrderBy(i => Array.IndexOf(order, i.TypeId));
- 根据Luke的评论编辑了这个例子,以便它能正确编译