2011-03-28 41 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