【问题标题】:How To show Grouped List on Razor View page?如何在 Razor 视图页面上显示分组列表?
【发布时间】:2019-04-25 06:04:26
【问题描述】:

我正在尝试在 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# linq asp.net-core model-view-controller group-by


【解决方案1】:

您需要为此创建一个视图模型类,因为现在,您正在将一个匿名对象传递给您的视图,这在技术上可以使用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>
}

【讨论】:

    【解决方案2】:
        it is almost same with marco's answer. 
    
        --make a view model
    
        public class CountryViewModel
        {
            public string Name { get; set;}
            public double Result {get; set;}
        }
        --at the controller need put 'ViewModel Name'
        var list1 = list.GroupBy(y => y.columnName1)
                       .Select(group => new CountryViewModel
                        {
                            Name = group.Key,
                            Result = group.Sum(x => x.columnName2)
                        })
                        .ToList();
    
    
         return View(list1);
    
    --foreach was same (i didn't need @model syntax on the top in this case.
    @foreach (var item in Model)
    {
       <tr>
          <td>@item.Name</td>
          <td>@item.Result</td>
       </tr>
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 2020-04-03
      • 1970-01-01
      • 2013-06-04
      • 2020-02-22
      相关资源
      最近更新 更多