2012-03-03 4 views
0

この場合ジェネリックを何らかの方法で使用できますか、エンティティフレームワーク のほうが適切でしょうか?.set<Type EntityType>です。私は同じLinQ操作を実行するが、別のエンティティのDBセットで、そう言う代わりにリポジトリの代わりに言っている.PCBuilds私はリポジトリの操作を実行したい。ホームなどLinQ操作を実行するエンティティの名前は、親パラメータの値。私はまた、カテゴリ値に関する特定のビューを返す必要があります。この場合、C#ジェネリックを適切に適用し、EntityフレームワークとMVCアクションメソッドを処理する方法

私はケーススイッチを使うことができましたが、もっと一般的な フレキシブルコードを採用できるかどうかは疑問です。または、エンティティタイプを に返すための個別のアクションメソッドを作成し、適切なルーティングエントリを作成するだけです。

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() 
関連する問題