2015-06-14 59 views
0

我有一個商店的ASP.NET MVC5應用程序。該應用程序已經建成,但我必須添加一些功能。實體框架使用來自其他存儲庫的功能

該應用程序使用具有接口和實體框架的領域層。

有一個數據庫表Products,我創建了一個表Reviews。這些表格由ProductId <> ReviewId鏈接並且具有一對多的關係。

Products

  • 產品編號
  • 產品名稱
  • ProductPrice

Review

  • ReviewId
  • ReviewName
  • ReviewRating
  • ReviewText

我創建了一個新的實體框架ReviewRepository與功能:

getAverageForProduct(int ProductId) 

它計算出的平均評價等級。

public double GetReviewAverage(int ProductId) 
    { 
     if (context.Review.Count(x => x.Product.ProductId == ProductId) == 0) 
     { 
      return 0; 
     } 
     else 
     { 
      return Math.Round(context.Review.Where(x => x.Product.ProductId == ProductId).Average(x => x.ReviewRating), 0); 
     } 
    } 

現在我想顯示產品頁面上的平均評分。

視圖設置是這樣的:

@model IEnumerable<Domain.Entities.Products> 

的產品展示與下面的循環:

@foreach (var m in Model) 
    { 
    } 

我如何計算的平均評價得分爲每一個產品?這是因爲視圖使用控制器的ProductRepository(功能:getAllProducts()),而不是ReviewRepository

該應用程序不使用視圖模型。

回答

1

解決了這個問題。創建一個簡單的視圖模型。

視圖模型:

public class PopularProductList 
{ 
    public Product Product { get; set; } 
    public double Average { get; set; } 
} 

在控制器:

 var model = new List<PopularProductList>(); 

     foreach (var p in ProductRepository.GetPopularProducts()) 
     { 
      var ProductList = new PopularProductList(); 
      ProductList.Product = p; 
      ProductList.Average = ReviewRepository.GetReviewAverage(p.ProductId); 

      model.Add(ProductList); 
     } 

     return View("Index", model);