2012-05-07 15 views
0

LINQ to SQLクエリの1つが正常に動作するのに問題があります。次のように私は3つのテーブルを設定している:LINQ to SQLクエリの問題

ベンダー ID - プライマリキー

メーカー ID - プライマリキー

ManufacturerVendorRelationships ID - プライマリキー MANUFACTURER_ID - VENDOR_IDをmanufacturer.idする外部キーを - 外部キーtoベンダー.id

現在、特定の製造元に関連していないベンダーをフェッチするLINQ to SQLクエリを作成しようとしています。たとえば、次の表のデータは、IDが1の製造元の2つのベンダのみになります。この例では、誰かがLINQ to SQLを手伝ってくれますか?今、アプリケーションはこのロジックを実行しています。前もって感謝します。

たぶん
Vendors 
ID 
1 
2 
3 
4 
5 

Manufacturers 
ID 
1 
2 
3 
4 
5 

ManufacturerVendorRelationships 
ID    ManufacturerID     VendorID 
1    1        1 
2    1        2 
3    1        3 
+0

何Linqを外部結合と同等のものにする必要があります。 http://stackoverflow.com/questions/700523/linq-to-sql-left-outer-join –

+0

申し訳ありませんが、使用しようとしているTransact-SQLとLinq-to-SQLの両方を投稿するのを忘れていました。 Arionの答えは以下のトリックでした。 – Grasshopper

答えて

1

このような何か:

var result=(
     from v in db.Vendors 
     where !db.ManufacturerVendorRelationships 
       .Select(s=>s.VendorID) 
       .Contains(v.ID) 
     select v 
    ); 

それとも、フィールドのようにそれをしたい場合:

var result=(
     from v in db.Vendors 
     select new 
     { 
      v.ID, 
      HasManufacturer=db.ManufacturerVendorRelationships 
          .Select(s=>s.VendorID) 
          .Contains(v.ID) 
     } 
    ); 
デシベルは、LINQのデータコンテキストで

+0

ありがとうございます。それがトリックでした。 – Grasshopper

+0

@JustinPihony:Okey。申し訳ありません。私はそれをやり始めます。 – Arion

0
int id= 1; 
var result = 
dc.Vendors 
    .Where(v => !dc.ManufacturerVendorRelationships 
       .Any(rel => rel.VendorId == v.Id && rel.ManufacturerId == id));