按特定顺序订购通用列表<t> </t>

时间:2012-04-05 12:22:43

标签: .net list

按照某些规则订购列表时遇到问题。

实际上我有链接对象列表示例列表列表;

以这种方式链接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做到这一点?

1 个答案:

答案 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;
}