2017-02-07 2 views
1

같은 유형의 값을 추출하지만 데이터베이스의 다른 참조를 기준으로 두 개의 LINQ 쿼리를 만들었습니다.두 개의 LINQ 표현식을 하나로 병합

var productGroupIdList = (from organizationalUnit 
          in user.OrganizationalUnit 
          from productGroup 
          in organizationalUnit.ProductGroup 
          select productGroup.ProductGroupId).ToList(); 
productGroupIdList.AddRange(from subOrganizationalUnit 
          in user.SubOrganizationalUnit 
          from productGroup 
          in subOrganizationalUnit.ProductGroup 
          select productGroup.ProductGroupId); 

하나의 LINQ 쿼리에 연결할 수있는 방법이 있습니까?

답변

1

에 나는이

했다

는 또한 하나 개의 쿼리로이 작업을 수행하기 위해이 사용 람다

user.OrganizationalUnit.SelectMany(x => x.ProductGroup) 
    .Concat(user.SubOrganizationalUnit.SelectMany(x => x.ProductGroup)) 
    .Select(x => x.ProductGroupId) 
    .Distinct() 
    .ToList() 
4

구조가 완전히 동일하면 Concat()을 사용할 수 있어야하며 이는 SQL에서 UNION ALL으로 변환됩니다.

var productGroupIdList = (from organizationalUnit 
         in user.OrganizationalUnit 
         from productGroup 
         in organizationalUnit.ProductGroup 
         select productGroup.ProductGroupId) 
        .Concat(
         from subOrganizationalUnit 
         in user.SubOrganizationalUnit 
         from productGroup 
         in subOrganizationalUnit.ProductGroup 
         select productGroup.ProductGroupId) 
        .ToList(); 
+0

어떤 방법을 만들어나요? –

+0

@MarekCzaplicki : 기술적으로 이것은 _ 하나의 LINQ 쿼리 인 'Concat()'이 LINQ의 일부입니다. 예를 들어'context.ProductGroups'로 시작하여'OrganizationalUnit' 또는'SubOrganizationalUnit'에 적절한 사용자가 연관되어있는 곳을 쿼리 할 수 ​​있습니다. – StriplingWarrior

1

두 쿼리의 일부만 연결하는 방법 : 두 번째 부분이 동일하므로 첫 번째 부분은 어떻습니까?

var productGroupIdList = from productGroup in 
      (from organizationalUnit in user.OrganizationalUnit 
      select organizationalUnit.ProductGroup) 
      .Concat(
       from subOrganizationalUnit 
       in user.SubOrganizationalUnit 
       select subOrganizationalUnit.ProductGroup) 
     select productGroup.ProductGroupId; 

또는 combinedProductGroups 별도의 변수이며, 전개 예를 참조

class Program 
{ 
    static void Main(string[] args) 
    { 
     var user = new User(); 

     var combinedProductGroups = (from organizationalUnit 
       in user.OrganizationalUnit 
       select organizationalUnit.ProductGroup) 
      .Concat(from subOrganizationalUnit 
       in user.SubOrganizationalUnit 
       select subOrganizationalUnit.ProductGroup); 

     var productGroupIdList = from productGroup in combinedProductGroups 
       select productGroup.ProductGroupId; 

    } 
} 

public class User 
{ 
    public List<OrgUnit> OrganizationalUnit; 
    public List<SubOrgUnit> SubOrganizationalUnit; 
} 

public class OrgUnit 
{ 
    public ProdGroup ProductGroup; 
} 

public class SubOrgUnit 
{ 
    public ProdGroup ProductGroup; 
} 

public class ProdGroup 
{ 
    public string ProductGroupId; 
} 
1

테이블이 같은 구조를 가지고 있다면, 당신은 수 있습니다 추측하고있다 (즉, 두 목록을 위해 결합 쿼리의 첫번째 부분입니다) 수 귀하의 모든 답변을 바탕으로

var result = user.OrganizationalUnit.SelectMany(x => x.ProductGroup.ProductGroupId) 
    .Concat(user.SubOrganizationalUnit.SelectMany(x => x.ProductGroup.ProductGroupId)).ToList(); 
+0

suo와 uiszczeniem을 연결할 수는 없지만 concat UO.pg와 suo.pg를 바꿔 줄 수 있습니다. –

+0

@MarekCzaplicki LINQ에 대한 SQL에 대한 경험이 없기 때문에 추측하고 있습니다.하지만 아마도 업데이트 된 버전이 있습니다. 일할 확률이 높습니다. 그것은 여전히 ​​2 개의 쿼리이지만, 하나의 모양입니다 :] 그리고 다른 대답처럼 하나의 SQL 쿼리로 변환해야합니다. – Slai

+0

실수로 이전에 언급 한 것에 대해 유감 스럽지만 이전 anwser는 내가 찾고있는 것에 매우 가깝습니다. 나는 새로운 대답을 게시했다. 보세요 –

관련 문제