2009-07-21 10 views
17

In Berichterstellungstools wie Crystal Reports gibt es Möglichkeiten, denormalisierte Daten zu sammeln und sie nach einer bestimmten Spalte in den Daten zu gruppieren. Dabei werden Zeilenüberschriften für jedes eindeutige Element in der angegebenen Spalte erstellt.Wie gruppiere ich Daten in einer ASP.NET MVC View?

Wenn ich dies:

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

Die Reporting-Software gruppiert es wie folgt aus:

Category1 
     Data1 
     Data2 
     Date3 
Category2 
     Data4 
     Data5 
     Data6 

Gibt es eine Möglichkeit, dies in einer ASP.NET MVC-Ansicht zu tun, vielleicht ein mit simple linq phrase oder linq extension method mit einer foreach oder einer verschachtelten foreach?

Antwort

40

Wenn Ihre Ansicht stark typisiert ist, können Sie die LINQ GroupBy-Extension-Methode mit verschachtelten foreach verwenden:

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

Dies wird ausgegeben viel wie Ihre formatierte Listen in der ursprünglichen Frage bereitzustellen. Es geht davon aus, dass Ihr Modell ungefähr so ​​aussieht:

public class ViewModel 
{ 
    public string Category { get; set; } 
    public string Data { get; set; } 
} 
Verwandte Themen