0

我在按特定规则订购列表时遇到问题。

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

它以这种方式构建的链接类:

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 做到这一点?

4

1 回答 1

2

不要让自己这么难。如果您想得太用功,您将寻求以非直观方式使用 LINQ 的非常复杂的解决方案。相反,亲吻。

首先,对没有的项目进行排序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;
}
于 2012-04-05T12:39:04.203 回答