天天看點

學習ASP.NET Core Razor 程式設計系列十七——分組

原文: 學習ASP.NET Core Razor 程式設計系列十七——分組 學習ASP.NET Core Razor 程式設計系列目錄 學習ASP.NET Core Razor 程式設計系列一 學習ASP.NET Core Razor 程式設計系列二——添加一個實體 學習ASP.NET Core Razor 程式設計系列三——建立資料表及建立項目基本頁面 學習ASP.NET Core Razor 程式設計系列四——Asp.Net Core Razor清單模闆頁面 學習ASP.NET Core Razor 程式設計系列五——Asp.Net Core Razor建立模闆頁面 學習ASP.NET Core Razor 程式設計系列六——資料庫初始化 學習ASP.NET Core Razor 程式設計系列七——修改清單頁面 學習ASP.NET Core Razor 程式設計系列八——并發處理 學習ASP.NET Core Razor 程式設計系列九——增加查詢功能 學習ASP.NET Core Razor 程式設計系列十——添加新字段 學習ASP.NET Core Razor 程式設計系列十一——把新字段更新到資料庫 學習ASP.NET Core Razor 程式設計系列十二——在頁面中增加校驗 學習ASP.NET Core Razor 程式設計系列十三——檔案上傳功能(一) 學習ASP.NET Core Razor 程式設計系列十四——檔案上傳功能(二) 學習ASP.NET Core Razor 程式設計系列十五——檔案上傳功能(三) 學習ASP.NET Core Razor 程式設計系列十六——排序

    在本教程中,我們來學習如何進行分組。

    通過前面的教程學習,你可以實作一個簡單的書籍管理系統。 在本教程将學習如何建立具有簡單分組功能的頁面。

一、建立About頁面來顯示書籍統計資訊

    在 書籍管理系統的“關于”頁上,将顯示每個出版社有多少書籍。 這要求在分組上再進行分組和簡單計算。 要完成此操作,需要執行以下操作:

  • 建立一個視圖模型類,該視圖類是需要傳遞到該視圖的資料的抽象。
  • 修改關于視圖。

二、 建立視圖模型

  1. 在Visual Studio 2017的解決方案資料總管的Model檔案夾中建立ViewModels檔案夾。
學習ASP.NET Core Razor 程式設計系列十七——分組

       2. 在新的檔案夾中,添加EnrollmentPublishGroup.cs類檔案,并且寫下代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; 

namespace RazorMvcBooks.Models.ViewModels
{

    public class EnrollmentPublishGroup
    {
        public string Publish { get; set; }
        public int BooksCount { get; set; } 

    }
}      

三、更新“About”頁面模型

    在Visual Studio 2017的解決方案資料總管的,找到 Pages/About.cshtml.cs 檔案,并且修改代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorMvcBooks.Models.ViewModels; 

namespace RazorMvcBooks.Pages
{

    public class AboutModel : PageModel
    {

        public string Message { get; set; }

        public async Task OnGetAsync()
        {
            Message = "Your application description page."; 

            IQueryable<EnrollmentPublishGroup> data =
                from book in _context.Book
                group book by book.Publishing into publishGroup

                select new EnrollmentPublishGroup()
                {

                    Publish = publishGroup.Key,
                    BooksCount = publishGroup.Count()

                }; 

            BookGroup =  await data.AsNoTracking().ToListAsync();

        }
        private readonly RazorMvcBooks.Models.BookContext _context;

        public AboutModel(RazorMvcBooks.Models.BookContext context)

        {
            _context = context;
        } 

        public IList<EnrollmentPublishGroup> BookGroup { get; set; }
    }

}

       

    LINQ 語句按出版社對書籍實體進行分組,計算每組中實體的數量,并将結果存儲在 EnrollmentPublishGroup 視圖模型對象的集合中。

    注意:EF Core 目前不支援 LINQ group 指令。 在上述代碼中,所有學生記錄均從 SQL Server 傳回。 group 指令應用于 Razor 頁面應用,而不是應用于 SQL Server。 EF Core 2.1 支援此 LINQ group 運算符,并在 SQL Server 上進行分組。

四、修改“About”Razor 頁面

    在Visual Studio 2017的解決方案資料總管的找到 Pages/About.cshtml 檔案中的代碼替換為以下代碼:

@page
@model AboutModel
@{
    ViewData["Title"] = "書籍統計資訊";
}

<h2>@ViewData["Title"]</h2>
<h3>@Model.Message</h3> 

<p>Use this area to provide additional information.</p> 

<h2>書籍統計資訊</h2>

<table>
    <tr>
        <th>
            出版社

        </th>
        <th>
            書籍數量

        </th>
    </tr> 

    @foreach (var item in Model.BookGroup)
    {

        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Publish)

            </td>
             <td align="right">

                @item.BooksCount
            </td>

        </tr>
    }
</table>      

五、運作結果

    在Visual Studio 2017的中按F5運作應用,并且點選“關于”頁面。 表格中會顯示每個出版社的書籍計數。

學習ASP.NET Core Razor 程式設計系列十七——分組