2009-07-21 25 views
17

Al informar herramientas como Crystal Reports, hay formas de tomar datos desnormalizados y agruparlos por una columna particular en los datos, creando encabezados de fila para cada elemento único en la columna especificada.¿Cómo puedo agrupar los datos en una vista ASP.NET MVC?

Si tengo esto:

Category1 Data1 
Category1 Data2 
Category1 Data3 
Category2 Data4 
Category2 Data5 
Category2 Data6 

El software de reporting agrupará así:

Category1 
     Data1 
     Data2 
     Date3 
Category2 
     Data4 
     Data5 
     Data6 

¿Hay una manera de hacer esto en una vista ASP.NET MVC, tal vez mediante un ¿frase simple de linq o método de extensión de linq con foreach o foreach anidado?

Respuesta

40

Si su visión es fuertemente tipado, puede utilizar el método de extensión LINQ GroupBy con foreach anidados:

<ul> 
<% foreach (var group in Model.GroupBy(item => item.Category)) { %> 

    <li><%= Html.Encode(group.Key) %> 
    <ul> 

    <% foreach (var item in group) { %> 
     <li><%= Html.Encode(item.Data) %></li> 
    <% } %> 

    </ul> 
    </li> 

<% } %> 
</ul> 

Esto proporcionará salida, igual que sus listas con formato de la pregunta original. Asume que su modelo se ve algo así como:

public class ViewModel 
{ 
    public string Category { get; set; } 
    public string Data { get; set; } 
} 
Cuestiones relacionadas