2012-05-07 3 views
0

У меня возникли проблемы с правильной работой одного из моих запросов LINQ to SQL. У меня есть три таблицы настройки следующим образом:Проблемы с LINQ to SQL Query

Вендоры ID - первичный ключ

Производители ID - первичный ключ

ManufacturerVendorRelationships ID - первичный ключ manufacturer_id - внешний ключ manufacturer.id VENDOR_ID - внешний ключ к vendor.id

Я пытаюсь написать запрос LINQ to SQL, который будет получать поставщиков, которые в настоящее время не связаны с данным производителем , Например, следующие данные таблицы должны приводить только к двум поставщикам для производителя с идентификатором 1. Может ли кто-нибудь помочь мне с 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

Что вы want - эквивалент Linq внешнего соединения. http://stackoverflow.com/questions/700523/linq-to-sql-left-outer-join –

+0

Извините, я забыл опубликовать как Transact-SQL, так и Linq-to-SQL, которые я пытался использовать. Ответ Ариона ниже сделал трюк. – 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));