2009-07-21 14 views
17

Negli strumenti di reporting come Crystal Reports, esistono modi per acquisire dati denormalizzati e raggrupparli per una particolare colonna nei dati, creando intestazioni di riga per ciascun elemento univoco nella colonna specificata.Come si raggruppano i dati in una vista MVC ASP.NET?

Se ho questo:

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

Il software di reporting raggrupperà in questo modo:

Category1 
     Data1 
     Data2 
     Date3 
Category2 
     Data4 
     Data5 
     Data6 

C'è un modo per fare questo in una visione ASP.NET MVC, magari utilizzando un semplice frase di linq o metodo di estensione linq con un foreach o un foreach annidato?

risposta

40

Se la vista è fortemente tipizzato, è possibile utilizzare il metodo di estensione LINQ GroupBy con foreach nidificato:

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

Ciò fornirà uscita proprio come i vostri elenchi formattati nella domanda iniziale. Si presuppone che il tuo modello assomigli a qualcosa:

public class ViewModel 
{ 
    public string Category { get; set; } 
    public string Data { get; set; } 
} 
Problemi correlati