次の方法で共有


方法 : 2 つのシーケンスを連結する (LINQ to SQL)

更新 : November 2007

2 つのシーケンスを連結するには、Concat<TSource> 演算子を使用します。

Concat<TSource> 演算子は、受信側と引数の順序が同じである、順序付けされたマルチセットに対して定義されます。

SQL での順序付けは、結果が作成される前の最終段階です。このため、Concat<TSource> 演算子は UNION ALL を使用して実装され、その引数の順序を保持しません。結果内での順序付けを正しく行うには、結果の順序を明示的に指定する必要があります。

使用例

この例では、Concat<TSource> を使用して、すべての Customer と Employee の電話番号と FAX 番号のシーケンスを返します。

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

この例では、Concat<TSource> を使用して、すべての Customer と Employee の名前と電話番号のマッピングのシーケンスを返します。

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

参照

参照

標準クエリ演算子の変換 (LINQ to SQL)

その他の技術情報

クエリの例 (LINQ to SQL)