2010-12-06 5 views
0

이 SQL 문을 LINQ로 변환하는 방법은 무엇입니까? 나 자신을 시도이 SQL을 LINQ로

var q = 
    from c in context.categories 
    select new CategoryCount 
    { 
     CategoryName = c.categoryName, 
     Counter = (
      from i in context.itemCategories 
      where c.categoryId == i.categoryId 
      select i).Count() 
    }; 
+0

이이없이 WHERE 절에 LINQ 절입니다 : var에 Q = (context.categories에 \t 새로운 CategoryCount을 선택 c를에서 \t { \t 범주 = c.categoryName, 카운터 = (from context.itemCategories c.categoryId == i.categoryId i) .Count() }을 선택하십시오. – danielovich

+0

우리는 당신의 프로그램을 작성하기 위해 여기에 온 것이 아니며, 당신이 이미 생각해 낸 것을 보여 주면 우리는 그것을 기꺼이 개선 할 것입니다. – Steven

+0

그리고 SQL 쿼리가해야 할 일은 무엇입니까? 나는 당신이'categories'와'items'에 대한 크로스 조인을하고있는 것을 봅니다. 이렇게하면'categoryName'이 N 회 반복됩니다. 여기서 N은 항목의 수입니다. 이게 니가 원하는거야? – Steven

답변

2

.

var query = from c in context.categories 
      join ic in context.itemCategories 
       on c.categoryId equals ic.categoryId into joined 
      select new CategoryCount 
      { 
       CategoryName = c.categoryName, 
       Counter = joined.Count(), 
      }; 

어떤 이유에서든 참여가 불편한 경우 여기를 클릭하십시오.

var query = from c in context.categories 
      select new CategoryCount 
      { 
       CategoryName = c.categoryName, 
       Counter = context.itemCategories 
           .Where(ic => ic.categoryId == c.categoryId) 
           .Count(), 
      }; 
0

:

SELECT categoryName, 
     (SELECT COUNT(*) cnt 
     FROM itemCategories 
     WHERE (categories.categoryId = itemCategories.categoryId) 
      AND (Items.countryPartId = 1)) AS cnt 
    FROM categories, Items 

이것은 내가 지금 가지고 한 LINQ 쿼리입니다. 그래서 미안 불편을 드려 스티븐, 다시 일어나지 않을 것입니다 :)이합니다 (Items 테이블의 겉보기 불필요한 사용은 제외) 동일한 쿼리를 생산하고 훨씬 더 자연 나에게 이럴입니다해야

var q = (from c in context.categories 
     from it in context.Items 
     select new CategoryCount 
     { 
      CategoryName = c.categoryName, 
      Counter = (from i in context.itemCategories 
        where c.categoryId == i.categoryId && it.countryPartId == 1 select i).Count() 
     });