2012-03-03 50 views
0

在這種情況下是否可能以某種方式使用泛型,或者可能存在更合適的實體框架 方法,即.set<Type EntityType>。我希望執行相同的LinQ操作,但在不同的實體數據庫集,所以說,而不是倉庫.PCBuilds我希望執行的操作在repository.Home等,實體的名稱執行LinQ操作將由父參數的值。我還需要返回有關類別值的具體視圖。如何在這種情況下正確應用C#泛型,處理實體框架和MVC操作方法

我可以使用一個case開關,但只是想知道我是否可以採用更通用和靈活的代碼。或者我應該創建單個操作方法來返回實體類型並創建適當的路由條目。

public PartialViewResult StoreContent(string Parent = "PCBuild" ,string category = "Desktop", int page = 1) 
    { 


     int pagesize = 3; 

     PagingStore IndexModel = new PagingStore() 
     { 
      PCBuilds = repository.PCBuilds.Where(x => x.ExternalCat.CatName == category).OrderBy(x => x.BDetails.Where(c => c.IsSelected == true).Select(c => c.Product.ListPrice).Sum()).Skip((page - 1) * pagesize).Take(pagesize).ToList(), 
      category = category, 
      PagingInfo = new PagingInfo() 
      { 
       CurrentPage = page, 
       ItemsPerPage = pagesize, 
       TotalItems = repository.PCBuilds.Where(x => x.ExternalCat.CatName == category).Count(), 
      } 

     }; 


     return PartialView(IndexModel); 
    } 

回答

0

如果PCBUild和家庭都有ExternalCat和BDetails和產品,那麼你就可以做到這一點

public interface IProductDescription { 
    Category ExternalCat { get; } 
    IQueryable<Option> BDetails { get; } 
} 

public partial class PCBuild : IProductDescription { 
} 

public partial class Home : IProductDescription { 
} 

和方法定義修改爲:

IQueryable<IProductDescription> GetProductDescriptions(string setName) { 
     switch(setName) { 
      case "PCBuild": 
       return this.PCBuilds; 
      case "Home": 
       return this.Homes; 
      ... 
     } 
    } 
} 

,只是使用它像這個: ...

PCBuilds = repository.GetProductDescriptions(setName) 
         .Where(x => x.ExternalCat.CatName == category) 
         .OrderBy(
          x => x.BDetails 
           .Where(c => c.IsSelected == true) 
           .Select(c => c.Product.ListPrice) 
           .Sum()) 
         .Skip((page - 1) * pagesize) 
         .Take(pagesize) 
         .ToList() 
相關問題