web-dev-qa-db-ja.com

ASP.NET MVCビューでデータをグループ化するにはどうすればよいですか?

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ビューでこれを行う方法はありますか?おそらく、foreachまたはネストされたforeachを使用した単純なlinqフレーズまたはlinq拡張メソッドを使用しますか?

19
Robert Harvey

ビューが強く型付けされている場合は、ネストされたforeachでLINQGroupBy拡張メソッドを使用できます。

<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; }
}
46
Jason