2013-06-19 4 views
0

Итак, у меня есть две таблицы Site and Contact, которые имеют отношение «многие-многие» через таблицу ContactSites. Таблицы Site и Contact имеют атрибут Boolean, называемый Deleted. Я пытаюсь попытаться написать запрос LINQ, который содержит список всех контактов, которые имеют удаленный атрибут = ложь и которые связаны сайты, которые также имеют удаленный атрибут = ложныйEF Linq Несколько внутренних объединений с использованием вложенных подзапросов

Вот код, я использую:

from c in Contacts 
where c.Deleted == false 
select new{c.LName, c.FName, SiteContactSites = 
          (from cs in ContactSites 
          where cs.Contact_ID == c.ID 
          select new{ cs.Contact_ID, cs.Site_ID, Sites = 
                   (from s in Sites 
                   where cs.Site_ID == s.ID && 
                   s.Deleted == false 
                   select cs).First()}).First()} 

но результаты, похоже, действуют как внешнее соединение против внутреннего соединения, которое я хочу.

Я специально искал способ сделать это с вложенными подзапросов и не присоединяется к которой будет:

from c in Contacts 
join cs in ContactSites on c.ID equals cs.Contact_ID 
join s in Sites on cs.Site_ID equals s.ID 
where c.Deleted == false && s.Deleted == false 
select c 

Любая помощь приветствуется

+0

делает второй - простой, лаконичный - пример кода работы? Если да, зачем вам подзапросы? – lisp

+0

Хорошо, второй пример кода работает при записи в linqpad, но не работает в C# vs2012, так как нет модели для ContactSites – user2129585

+0

, но тогда первый квартер тоже не будет работать, потому что вы присоединяетесь к ContactSites. – lisp

ответ

0

Так следующий делает трюк:

from c in db.Contacts 
from co in c.Communities 
where co.Deleted == false 
select c 

Его все в свойствах навигации, когда вы используете LINQ to Entities, так что соединение происходит на странице «from co in c.Communities». Я думаю, что моя путаница я использовал LINQPad, который использует LINQ для SQL

эта ссылка была полезной и сделал вещи для меня ясно:

http://peter.hahndorf.eu/blog/post/2010/12/31/UsingLinqInManytomanySelectScenarios

 Смежные вопросы

  • Нет связанных вопросов^_^