首页 > 解决方案 > 如何在 Razor 视图页面上显示分组列表?

问题描述

我正在尝试在 Razor 视图页面上显示具有“foreach”语法的分组列表。我能怎么做?

I made list like this. It works.
*before you read this: 'columnName1' is string, 'ColumnName2' is double.

//控制器 - -

var list = db.xxx.where(x => x.ID == 92).ToList();
return View(list);

//view---

<table class="">


@foreach (var controllerName in modle)
{
 <tr>
  <td>@controllerName.ColumnName1</td>
  <td>@controllerName.ColumnName2</td>
 </tr>
}

我尝试在下面进行分组和求和。//控制器

var list = db.xxx.where(x => x.ID == 92).ToList();

var list1 = list
.GroupBy(y => y.columnName1)
            .Select(group => new
            {
            columnName1 = group.Key,
            columnName2 = group.Sum(x => x.columnName2)
            })
            .ToList();


            return View(list1);

我希望显示带有分组和求和的列表。

//桌子

columnName1  | columnName2(sum result)
USA          |  12
JAPAN        |  10

标签: c#linqasp.net-coremodel-view-controllergroup-by

解决方案


您需要为此创建一个视图模型类,因为现在,您正在将一个匿名对象传递给您的视图,这在技术上是可以使用的dynamic,但我不鼓励这样做。如果你出错,强类型视图总是会给你编译时错误:

public class CountryViewModel
{
    public string Name { get; set;}
    public double Result {get; set;}
}

然后更改您的操作方法以将该类返回到视图:

var list1 = list.GroupBy(y => y.columnName1)
                .Select(group => new CountryViewModel
                {
                    Name = group.Key,
                    Result = group.Sum(x => x.columnName2)
                })
                .ToList();


 return View(list1);

在您的视图中,将您的模型定义更改为该视图模型类

@model Namespace.To.Your.CountryViewModel

最后,您可以再次在 for each 循环中使用智能感知和模型绑定:

@foreach (var item in Model)
{
   <tr>
      <td>@item.Name</td>
      <td>@item.Result</td>
   </tr>
}

推荐阅读