2012-05-17 3 views
0

내가 Linq에 정말 익숙하지 오전 나는 다음과 같은 데이터를 얻을 수있는 쿼리를 작성해야 조인복잡한 Linq에 쿼리

제품
아이디,
그룹 ID를,
제품 코드,
SpecificCode
...

ProductGroup
아이디,
상태
...

규칙
아이디,
그룹 ID,
제품 코드,
SpecificCode
...

매개 변수 :
,210 제품 코드 : 문자열 SpecificCode
: 문자열

요구 :
하지 1.Get 모든 ProductGroups Status = Active 및 제품 코드와 SpecificCode는 파라미터와 일치하는 적어도 하나 개의 제품과 관련된다.

2.이 그룹과 관련된 모든 규칙을 가져옵니다.

3. 규칙 자체에 일치하는 Productcode + SpecificCode가없는 규칙을 필터링하십시오.

나는이 과정을 이해하는 데 도움이되기 때문에 여러 단계로 작성했습니다. 하나의 쿼리에서 가능할 수도 있습니다 - 모르겠습니다. TBH 다중 쿼리가 필요한지는 신경 쓰지 않고, 정확한 결과 세트를 얻기 위해 필요합니다. 중복이 없으므로 (실제로 고심하고 있습니다).

많은 감사!

+0

사람들이 더 중복 데이터가 무엇을 의미하는지에 대한 이해를 얻을 수 있도록 몇 가지 예제 데이터를 제공 할 수 있습니다 – dplante

답변

0
 from pg in ProductGroup   
     where pg.status == "active" 
     select new 
     { 
     ProductGroup = pg, 
     Products = (from p in Product 
       && p.GroupId = pg.Id 
       && p.productcode == inputproductcode 
       && p.specificcode == inputspcode).ToList(), 

     Rules = pg.Rules.Where(r=>r..productcode == inputproductcode && r.specificcode == inputspcode).ToList() 
     } 

이와 비슷한 것이 좋습니다.

+0

싫다. Pg.Products를 수행 할 수 없습니다 - 거기에는 관계가 없습니다. – Kev

+0

그와 같은 것을 시도해보십시오. 이상하지만, 그 속성을 설정해야합니다. –

0

어떨까요? 당신의 재산이 Products, ProductGroupsRules입니다 가정 :

var productGroups = (from p in Products 
        join pg in ProductGroups on p.GroupId equals pg.Id 
        where pg.Status = "Active" 
        select new 
          { 
           p.ProductCode, 
           p.SpecificCode, 
           Rules = Rules.Where(r => r.ProductCode == p.ProductCode 
            && r.SpecificCode == p.SpecificCode).ToList() 
          }) 
        .ToList(); 
+0

ProductGroup에는 ProductCode 및 SpecificCode 특성이 없습니다. – Kev

+0

아, 제품을 ProductGroup에 연결하는 것은 무엇입니까? – mattytommo

+0

Product.GroupId == ProductGroup 인 경우.Id – Kev