2009-08-25 7 views
2

こんにちはどのようにSQLにlinqの結合を行うのですか?linqでsqlへの結合を行うには?

私は彼らにキーワードの参加とグループ参加があるのを見ますが、どのような種類の結合ですか?

左、右、十字、内側?

また、完了したら特定の列を選択するにはどうすればよいですか?

表Aから選択した列1、列2

等。

いずれのクエリまたはメソッド構文も問題ありません。私はまだ自分の好きなものを決めることはできません。

答えて

4

最初のステップとして、Scott Guthrieの優れたUsing Linq-to-SQLマルチパートのチュートリアルを読むことをお勧めします。 Linq-to-SQLの基本はたくさんあります。

Hooked on LINQ 5 minute overview - LINQ-to-SQLでは、Linq-to-SQLでよく言われているように、実際にはJOINを自分で表現する必要はありません.LINQ-to-SQLは、エンティティ参照とエンティティセット参照。

あなたが実際にJOINを明示的に使用しなければならないと判断した場合、Bilal Haidarは自分のブログの投稿でexplicit LEFT OUTER JOINをうまく実行する方法を示します。

INNER JOINを比較的簡単ですが、「通常」の場合 - あなたは自分のクエリに

from c in customers 
    join o in orders on o.customerid equals c.customerid 

を追加します。

個々のフィールドの選択については、Scott Guthrieのイントロ記事シリーズを参照してください - 彼はそれを非常に詳細に説明します!

基本的には、3つのいずれか行うことができます。

  • を(顧客など)全体のエンティティを選択し、それ
  • のために戻ってすべての情報を取得し、新たな既存の型にいくつかのフィールドを選択します(

    :例えば「CustomerOrderが」タイプ)
  • は新しい匿名型

これが注文を持っているすべての顧客を選択することになるにいくつかのフィールドを選択します

from c in customers 
     join o in orders on o.customerid equals c.customerid 
     select c; 

これはすでにどこかのプロジェクトに存在する新しい「CustomerOrderが」型にすべての顧客と注文を選択します:これは新しい、匿名型に顧客IDと注文日付を選択することになる

from c in customers 
     join o in orders on o.customerid equals c.customerid 
     select new CustomerOrder { CustomerName = c.Name, 
           CustomerID = c.CustomerId, 
           OrderDate = o.OrderDate, ...... } ; 

あなたが使用するために:

from c in customers 
     join o in orders on o.customerid equals c.customerid 
     select new { CustomerID = c.CustomerId, OrderDate = o.OrderDate } ; 

それは強いタイプだ - と、この背後にある本格的な.NETのCLR型があります - あなただけの、その名前の:-)を知らないしかし、あなたはコード内でこれらの要素を使用することができ、あなたはIntellisenseを手に入れます。いくつかのデータの迅速な一時的操作。

マルク・

+0

コード例では、 "="ではなく "equals"キーワードを使用する必要があります。 (代入演算子)、または "=="(等価演算子)さえあります。 –

+0

おっと、ありがとう、ランス!!私はちょっとそれに慣れることができません..... –

+0

例をありがとう。参加は少ないはずですが、私はこのシチュエーションに参加していましたが、参加することなくそれを行うことができたかもしれませんが、どうしたらいいのか分かりません。 PKとFKの関係。私はいくつかのwhere句に基づいて最初にPKテーブルをフィルタリングしたいと思います。私がPKテーブルから得たフィルタ結果に基づいて、FKテーブルからいくつかのフィールドを取得したいとします。私はしかし、データベースをマージして返す方法は不明でした。 – chobo2

0

LINQからSQLへのMSDNの記事をチェックアウトが参加する: http://msdn.microsoft.com/en-us/library/bb425822.aspx#linqtosql_topic12

Aは、LINQに参加内部結合です。

LINQでのグループ結合は、into句を持つ結合です。親情報は、子情報のグループに結合される。つまり、子情報はコレクションにまとめられ、子コレクションの親情報は1回だけ発生します。

0

LINQのjoinキーワードは、内部結合を行います。 select句に新しいオブジェクトを作成することで、結果を「プロジェクト」することができます。そのオブジェクトは型付きでも匿名でもかまいません。ここに例があります:

var ordersAndProducts = from o in orders 
    join p in products on o.ProductId equals p.ProductId 
    select new { OrderDate = o.OrderDate, ProductName = p.Name }; 

このクエリは、ProductIdプロパティの注文と製品コレクションを内部結合します。

LINQ to SQLを使用している場合(あなたのように見えます。アプリケーションをデバッグするか、データベースでプロファイラを実行することで、データベースに送信されるSELECT文を確認できます。

関連する問題