2017-12-19 11 views
0

接合体表を経由してその製品を数える私は道オフかもしれないが、いくつかのグーグルは、このクエリを生成するために私をリードしてきました:C#のクエリのカテゴリと

VMCategory = from pc in _context.ProductCategories 
      join pic in _context.ProductsInCategories 
      on pc.Id equals pic.ProductCategoryId 
      group pic by pc into x 
      select new ViewModelProductCategory 
      { 
       Id = x.Key.Id, 
       ParentId = x.Key.ParentId, 
       Title = x.Key.Title, 
       SortOrder = x.Key.SortOrder, 
       NumOfProductsInThisCategory = x.Count(c => [SOMETHING IS MISSING]) 
      }). 
      ToList(); 

私はカテゴリでのviewmodelリストを移入しようとしていますエンティティモデルの項目、および各カテゴリのすべての製品の数です。

私は(カテゴリオブジェクトのリスト内の項目など)の結果、このタイプのものが必要です

Id = 6       (from ProductCategory) 
ParentId = 4     (from ProductCategory) 
Title = "Example"    (from ProductCategory) 
SortOrder = 2     (from ProductCategory) 
NumOfProductsInThisCategory = 7 (count products from ProductsInCategories) 

は、これらは私のモデルです:

のViewModel:

public class ViewModelProductCategory 
{ 
    public int Id { get; set; } 
    public int? ParentId { get; set; } 
    public string Title { get; set; } 
    public int SortOrder { get; set; } 
    public int NumOfProductsInThisCategory { get; set; } 
} 

エンティティモデル:

public class ProductCategory 
{ 
    public int Id { get; set; } 
    public int? ParentId { get; set; } 
    public string Title { get; set; } 
    public int SortOrder { get; set; } 
} 

public class ProductInCategory 
{ 
    public int Id { get; set; } 
    public int ProductId { get; set; } 
    public int ProductCategoryId { get; set; } 
    public int SortOrder { get; set; } 
} 
+1

[GROUPBYカウントとLINQ](HTTPSの可能性のある重複:// stackoverflowの.com/questions/7285714/linq-with-groupby-and-count) –

+0

'x.Count()'のままにした場合どうなりますか? [Fiddle](https://dotnetfiddle.net/#)を作れますか? –

答えて

2

VMCategory = from pc in _context.ProductCategories 
      join pic in _context.ProductsInCategorieson pc.Id equals pic.ProductCategoryId into picj 
      select new ViewModelProductCategory { 
       Id = pc.Id, 
       ParentId = pc.ParentId, 
       Title = pc.Title, 
       SortOrder = pc.SortOrder, 
       NumOfProductsInThisCategory = picj.Count() 
      }). 
      ToList(); 
+0

これは助けになりました! :)しかし今、私は各カテゴリーに製品のリストを追加したいと思います。私はこれを試してみましたが、それはダメません:_context.ProductCategories でPCから は(pc.Id上_context.ProductsInCategories でPICに参加したpに等しいpic.ProductId上_context.Products のpに参加picj にpic.ProductCategoryIdに等しいです。 .IDは新しいViewModelProductCategory {ID = pc.Id、 ParentIdは= pc.ParentId、 タイトル= pc.Title、 SORTORDER = pc.SortOrder、 NumOfProductsInThisCategory = picj.Count()、 製品=新製品を選択 { \t Id = p.Id、 \tタイトル= p.Title、 \t情報= p.Info、 \t価格= p.Price }})ToListメソッド()。 – Stian

1

Sあなたのモデルと多対1の関係を形成することに役立つ何かがあります。 だからこれにエンティティモデルを変更:

public class ProductCategory 
{ 
    public int Id { get; set; } 
    public int? ParentId { get; set; } 
    public string Title { get; set; } 
    public int SortOrder { get; set; } 
    public List<ProductInCategory> ProductInCategory { get; set; } 
} 

public class ProductInCategory 
{ 
    public int Id { get; set; } 
    public int ProductId { get; set; } 
    public int SortOrder { get; set; } 
    public int ProductCategoryId { get; set; } 
} 

次に何を行うことができますが、このです:

var ProductList = _context.ProductCategory.Include(p=> p.ProductInCategory).ToList() 

ニースとシンプルな、あなたがカテゴリのあなたの完全なリストを持っており、これらのカテゴリのそれぞれが含まれていますその中のすべての製品のリスト カウントダウンなどを行うために、その書き方の最後にwhere句を投げることができます。または、IFループまたはForeachループであっても、foreach製品カテゴリでProductInCategoryをカウントするとします。

テーブル間に関係があると、ヒープできます。あなたが参加している場合は、あなたがGroupJoinを行うことができますし、あなたがGroupByを必要としない

カズ

関連する問題