2017-12-19 1 views
0

에 합류 제품 테이블을 통해 제품을 계산하지만, 일부 인터넷 검색이 쿼리를 생성하는 저를 주도하고있다 엔티티 모델의 항목 및 각 카테고리의 모든 제품 수입니다.C#을 질의 범주 내가 방법이 떨어져있을 수 있습니다

나는 (카테고리 개체의 목록에있는 항목 등) 결과의 유형을 필요

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

이 내 모델입니다 :

뷰 모델 :

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 : //로 유래 .com/questions/7285714/linq-with-groupby-and-count) –

+0

'x.Count()'와 같이두면 어떻게됩니까? [Fiddle] (https://dotnetfiddle.net/#)을 만들 수 있습니까? –

답변

2

, 당신은 GroupJoin 할 수 있으며, 당신이 필요로하지 않는 GroupBy :

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.ProductsInCategories의 그림에 가입 _context.ProductCategories의 PC에서 이 (pc.Id에 가 picj 에 pic.ProductCategoryId 동일 가입 _context.Products에서 p는 pic.ProductId에 은 P와 동일 .ID는 ViewModelProductCategory { 식 pc.Id, ParentId = pc.ParentId, 제목 = pc.Title, SORTORDER = pc.SortOrder, NumOfProductsInThisCategory = picj.Count() 새로운 제품 = 새로운 제품을 선택 { \tdid = p.Id, \t Title = p.Title, \t 정보 = p.Info, \t 가격 = p.Price } }). ToList(); – Stian

1

S 뭔가 도움이 될 수있는 뭔가가 당신의 모델과 함께 하나의 본드를 형성하고 있습니다. 그래서이 당신의 엔티티 모델을 변경

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

니스와 간단하고 당신이 카테고리의 전체 목록을 가지고 그 각 카테고리에 포함됩니다 :

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; } 
} 

그런 다음 당신이 할 수있는 것은 이것이다 그 안에있는 모든 제품의 목록. 카운트 다운 등의 작업을 끝낼 때 where 절을 던질 수 있습니다. 또는 foreach 제품 범주에서 ProductInCategory를 계산하는 IF 루프 또는 Foreach 루프.

힙은 테이블간에 관계가 생기면 할 수 있습니다. 당신이 가입하는 경우

카즈