在循环数据时制作列表列?

时间:2011-03-28 04:24:35

标签: c# loops ienumerable modulo

我一直想问这个问题。让我们说在C#中我有一个IEnumerable<Cars>,它包含20个来自我的SQL数据库的LINQ查询的结果。

我想使用ul标记将其列为4列中的5列。我通常最终会做的是开始第一个ul,然后foreach通过可枚举,在% 5 == 0 ul关闭foreach并开始新的时候保留一个计数器一个......在ul之后,添加最终结算{{1}}。

有更好的方法吗?

1 个答案:

答案 0 :(得分:5)

您可以使用GroupBy()按照您想要的方式将汽车分组在一起,在您的情况下,将5辆车组合在一起(使用整数除法,因此索引为0到4的汽车将在第1组中,第2组中的索引5到9等):

 List<Car> cars = new List<Car>();
 //populate cars

 var carGroups = cars.Select((car, index) => new { Index = index, Car = car })
                     .GroupBy(x => x.Index / 5)
                     .Select(g => g.Select(x => x.Car).ToList())
                     .ToList();

    foreach (var group in carGroups)
    {
        //Emit <UL>
        foreach (var car in group)
        {
            //Emit <LI> with car details
        }
        //Emit </UL>
    }