【问题标题】:How do I group data in an ASP.NET MVC View?如何在 ASP.NET MVC 视图中对数据进行分组?
【发布时间】:2010-11-12 17:22:30
【问题描述】:

在 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 扩展方法?

【问题讨论】:

    标签: c# asp.net-mvc linq linq-to-sql reporting


    【解决方案1】:

    如果您的视图是强类型的,您可以使用带有嵌套 foreach 的 LINQ GroupBy 扩展方法:

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

    【讨论】:

    • 但是你将如何将它发布到控制器,实际上我得到的是空结果。
    【解决方案2】:
    <table class="table table-striped table-bordered">
        @foreach (var plan in Model.GroupBy(p => p.PlanName))
        {
            <thead>
                <tr>
                    <th></th>
                    <th>
                        @plan.Key
                    </th>
                </tr>
            </thead>
            <tbody>
                @foreach (var plan1 in plan)
                {
                    <tr>
                        <td>@plan1.PlanDetails</td>
                        <td>@plan1.PlanOption</td>
                    </tr>
                }
            </tbody>
            <tfoot>
    
            </tfoot>
        }
    
    </table>
    

    【讨论】:

    • 这可以从一些解释中受益。
    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多