2011-03-28 54 views
1

我一直想问这个。比方说,在C#中我有一个IEnumerable<Cars>,其中包含来自LINQ查询的20个结果到我的SQL数据库。在循环数据时做列表列?

我想列出它的4列5,使用ul标签。我通常最终会开始做第一ul,然后foreach通过枚举是,保持内部的一个计数器时,它的% 5 == 0我关闭ul,并开始一个新的...之后foreach,加入最终收盘ul

有没有更好的方法来做到这一点?

回答

5

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

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> 
    } 
+0

非常好...我喜欢那样。如果你想在每个显示组名称的“ul”上面添加标题,那么怎么办?它在该组中可用吗? – Chaddeus 2011-03-28 04:41:38

+0

@Chad:你会定义什么样的组名称? – BrokenGlass 2011-03-28 04:42:53

+0

也许像Car.Make分组的东西......(本田,丰田,GMC,福特等...) – Chaddeus 2011-03-28 04:54:55