다음을 통해 공유


두 시퀀스 연결

Concat 연산자를 사용하여 두 시퀀스를 연결합니다.

Concat 연산자는 수신자와 인수의 순서가 동일하게 정렬된 다중 집합에 대해 정의되어 있습니다.

SQL의 정렬은 결과 생성 전에 수행되는 최종 단계입니다. 이러한 이유로 인해 Concat 연산자는 UNION ALL을 사용하여 구현되며 해당 인수의 순서를 유지하지 않습니다. 결과에 정렬을 올바르게 하려면 결과를 명시적으로 정렬해야 합니다.

예 1

이 예제에서는 Concat을 사용하여 모든 CustomerEmployee에 대한 전화 번호 및 팩스 번호의 시퀀스를 반환합니다.

IQueryable<String> custQuery =
    (from cust in db.Customers
    select cust.Phone)
    .Concat
    (from cust in db.Customers
    select cust.Fax)
    .Concat
    (from emp in db.Employees
    select emp.HomePhone)
;

foreach (var custData in custQuery)
{
    Console.WriteLine(custData);
}

Dim custQuery = _
    (From c In db.Customers _
     Select c.Phone) _
    .Concat _
    (From c In db.Customers _
     Select c.Fax) _
    .Concat _
    (From e In db.Employees _
     Select e.HomePhone)

For Each custData In custQuery
    Console.WriteLine(custData)
Next

예제 2

이 예제에서는 Concat을 사용하여 모든 CustomerEmployee에 대한 이름 및 전화 번호 매핑의 시퀀스를 반환합니다.

var infoQuery =
    (from cust in db.Customers
    select new { Name = cust.CompanyName, cust.Phone }
    )
   .Concat
       (from emp in db.Employees
       select new
       {
           Name = emp.FirstName + " " + emp.LastName,
           Phone = emp.HomePhone
       }
       );

foreach (var infoData in infoQuery)
{
    Console.WriteLine("Name = {0}, Phone = {1}",
        infoData.Name, infoData.Phone);
}
Dim infoQuery = _
    (From cust In db.Customers _
     Select Name = cust.CompanyName, Phone = cust.Phone) _
    .Concat _
        (From emp In db.Employees _
         Select Name = emp.FirstName & " " & emp.LastName, _
             Phone = emp.HomePhone)

For Each infoData In infoQuery
    Console.WriteLine("Name = " & infoData.Name & _
        ", Phone = " & infoData.Phone)
Next

참고 항목