ThS. CNTT: Nguyễn Nghiệm – nghiemn@fpt.edu.vn Trang 1
BÀI 8: THỐNG KÊ HÀNG HÓA
MỤC TIÊU
Biết cách sử dụng phương thức mở rộng GroupBy() của Linq để thống kê thông tin hàng hóa.
MÔ TẢ
Trong bài này bạn phải tạo trang thống kê thông tin hàng hóa theo nhà cung cấp và chủng loại. Kết quả
thống kê được trình bày như sau:
THỰC HIỆN
Bước 1: Tạo lớp chứa thông tin thống kê
Bước 2: Bổ sung Action Report vào ProductController
Bước 3: Tạo View Report.cshtml
Bước 1: Tạo lớp chứa thông tin thống kê
Bạn cần tạo một lớp Report trong thư mục Models để mô tả thông tin thông kê. Sau đây là mã nguồn
của lớp.
namespace MVC4Seminar.Models
{
public class Report
{
public String Category { get; set; } // tên loại
public String Supplier { get; set; } // tên nhà cung cấp
public double Total { get; set; } // tổng giá
public double Average { get; set; } // giá trung bình
public int ItemCount { get; set; } // tổng số lượng
public double MinPrice { get; set; } // giá nhỏ nhất
public double MaxPrice { get; set; } // giá lớn nhất
ThS. CNTT: Nguyễn Nghiệm – nghiemn@fpt.edu.vn Trang 2
}
}
Bước 2: Bổ sung Action Report vào ProductController
Action này có nhiệm vụ thống kê thông tin hàng hóa và chuyển cho view Report.cshtml để trình bày lên
giao diện.
Trong bài này bạn sẽ nhóm hàng hóa theo loại và nhà cung cấp sau đó tổng hợp thông tin thống kê. Để
nhóm theo nhiều thuộc tính, bạn cần nhóm theo một đối tượng chứa các thuộc tính đó. Mã của action
này như sau.
public ActionResult Report()
{
var items = db.Products.GroupBy(p => new { p.Category, p.Supplier })
.Select(g => new Report
{
Category = g.Key.Category.Name,
Supplier = g.Key.Supplier.Name,
Total = g.Sum(p => p.UnitPrice),
ItemCount = g.Count(),
MinPrice = g.Min(p => p.UnitPrice),
MaxPrice = g.Max(p => p.UnitPrice),
Average = g.Average(p => p.UnitPrice)
});
return View(items);
}
Bước 3: Tạo View Report.cshtml
Công việc của view thật sự đơn giản, chỉ việc hiển thị thông tin đã được chuyển từ action của controller.
Trong bài này, bạn sử dụng String.Format() để định dạng dữ liệu cho đẹp mắt.
@model IEnumerable<Report>
@{
ViewBag.Title = "Thống Kê Hàng Hóa";
}
<table class="gridview">
<tr>
<th>Nhà CC</th>
<th>Loại</th>
<th>Tổng Giá Trị</th>
<th>Tổng SL</th>
<th>Giá Trị TB</th>
<th>Giá Nhỏ Nhất</th>
<th>Giá Lớn Nhất</th>
</tr>
@foreach(var p in Model){
<tr>
<td>@p.Supplier</td>
<td>@p.Category</td>
<td>@String.Format("{0:c}", p.Total)</td>
<td>@p.ItemCount</td>
<td>@String.Format("{0:c}", p.Average)</td>
ThS. CNTT: Nguyễn Nghiệm – nghiemn@fpt.edu.vn Trang 3
<td>@String.Format("{0:c}", p.MinPrice)</td>
<td>@String.Format("{0:c}", p.MaxPrice)</td>
</tr>
}
</table>
. Models để mô tả thông tin thông kê. Sau đây là mã nguồn
của lớp.
namespace MVC4Seminar. Models
{
public class Report
{
public String Category { get;