在一组对象列表中选择一组n个对象

时间:2015-04-16 23:18:12

标签: linq

我有对象A,我有长度。我希望按长度顺序排序,然后我想将它们分组为三个并返回对象列表的列表。

我可以让分组工作,但我得到的只是分组的关键,而不是项目。

public class a
{
    public string Id { get; set; }
    public int Length { get; set; }
}

List<a> c = Instantiate a list

c.OrderByDescending(x => x.Length)
.Select((e, i) => new { Item = e, Grouping = (i / 3) })
.GroupBy(x => x.Grouping)
.Select(x => x.Key)
.ToList()

我认为这与我的小组有关,但我似乎无法让它发挥作用。我想要的是List<List<a>>,最多有三个项目。

2 个答案:

答案 0 :(得分:2)

使用此.Select(grp => grp.ToList())代替.Select(x => x.Key)。 这会将该组作为List<a>返回。

答案 1 :(得分:0)

以下查询将生成列表,其中内部列表包含三个项目:

var listOfTriplets = c.OrderByDescending(x => x.Length)
    .Select((x, i) => new { Index = i, Value = x })
    .GroupBy(x => x.Index / 3)
    .Select(x => x.Select(v => v.Value).ToList())
    .ToList();