2009-07-21 6 views
17

Dans les outils de création de rapports tels que Crystal Reports, vous pouvez prendre des données dénormalisées et les regrouper selon une colonne particulière dans les données, en créant des en-têtes de ligne pour chaque élément unique de la colonne spécifiée.Comment regrouper des données dans une vue ASP.NET MVC?

Si j'ai ceci:

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

Le logiciel de reporting regrouperons comme ceci:

Category1 
     Data1 
     Data2 
     Date3 
Category2 
     Data4 
     Data5 
     Data6 

Est-il possible de le faire dans une vue ASP.NET MVC, en utilisant peut-être simple expression linq ou méthode d'extension linq avec un foreach ou un foreach imbriqué?

Répondre

40

Si votre opinion est fortement typé, vous pouvez utiliser la méthode d'extension LINQ GroupBy avec foreach imbriquées:

<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> 

Cela fournira la sortie un peu comme vos listes formatées dans la question initiale. Il suppose que votre modèle ressemble à quelque chose comme:

public class ViewModel 
{ 
    public string Category { get; set; } 
    public string Data { get; set; } 
} 
Questions connexes