按照某些规则订购列表时遇到问题。
实际上我有链接对象列表示例列表列表;
以这种方式链接Class它的构建:
private class Links
{
public Int32 IdHost { get; set; }
public String Url { get; set; }
}
现在使用此代码我按IdHost订购列表。
var listSortedById = source
.OrderBy(n => n.IdHost).ToList();
问题现在开始因为我希望idHost == 2应该放在列表中的每5个元素而不是一个。
更新示例
例如:2 1 1 1 3 3 3 4 4 4 1 1 1 2 3 3 3 4 4 4 1 1 1 3 3 3 2 4 4 4我的意思是每5个元素放入idHost == 2。
对于首先出现的元素,我希望它成为idHost == 2。 有没有办法用Linq做到这一点?
答案 0 :(得分:2)
不要让自己如此努力。如果你认为太难了,你会找到以非直观的方式使用LINQ的真正复杂的解决方案。相反,KISS。
首先,对没有IdHost == 2
的项目进行排序,并将这些项目放入列表中:
var sorted = source.Where(x => x.IdHost != 2)
.OrderBy(x => x.IdHost)
.ToList();
然后,收集包含IdHost == 2
:
var twos = source.Where(x => x.IdHost == 2);
最后,将每个第5个位置的这些项目插入到列表中:
int index = 0;
foreach(var two in twos) {
sorted.Insert(index, two);
index += 5;
}