Как сгруппировать данные в ASP.NET MVC View? - PullRequest
19 голосов
/ 21 июля 2009

В таких инструментах отчетности, как Crystal Reports, есть способы взять денормализованные данные и сгруппировать их по определенному столбцу данных, создавая заголовки строк для каждого уникального элемента в указанном столбце.

Если у меня есть это:

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

Программное обеспечение для отчетности сгруппирует его следующим образом:

Category1
      Data1
      Data2
      Date3
Category2
      Data4
      Data5
      Data6

Есть ли способ сделать это в представлении ASP.NET MVC, возможно, используя простую фразу linq или метод расширения linq с foreach или вложенным foreach?

1 Ответ

46 голосов
/ 21 июля 2009

Если ваше представление строго типизировано, вы можете использовать метод расширения LINQ GroupBy со вложенным foreach:

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

Это обеспечит вывод, очень похожий на ваши отформатированные списки в исходном вопросе. Предполагается, что ваша модель выглядит примерно так:

public class ViewModel
{
    public string Category { get; set; }
    public string Data { get; set; }
}
...