2013-08-01 3 views
2

У меня проблема с оператором LINQ.Проблемы с объединением LINQ

У меня есть 3 стола: Examinations, ExaminationProtocols и SampleTests.

До сих пор я использовал этот оператор, поскольку мне нужна только информация только из первых двух таблиц.

var baseQuery = from e in context.Examinations 
       join ep in context.ExaminationProtocols 
       on e.ID equals ep.ExaminationID into er 
       from r in er.DefaultIfEmpty() 
       select new { E = e, EP = r }; 

Но теперь мне нужно, чтобы получить ExaminationProtocols, которые имеют по крайней мере 1 SampleTest с полем acccurate = true.

внешний ключ между SampleTest и ExaminationProtocols является

EP.ID equal ST.examinationProtocolID 

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

Если кто-нибудь может дать мне отзыв, я буду благодарен.

ответ

2

Это дает вам необходимый результат?

var baseQuery = from e in context.Examinations 
       join ep in context.ExaminationProtocols 
        on e.ID equals ep.ExaminationID into er 
       from r in er.DefaultIfEmpty() 
       join st in context.SampleTests 
        on r.ID equals st.examinationProtocolID 
       where st.acccurate 
       select new { E = e, EP = r }; 
+0

Спасибо он работал отлично! – Jordan

0

Это может быть написана как этот

var baseQuery = from e in Examinations 
       join ep in ExaminationProtocols.Where(x => SampleTests.Where(y => y.accurate).Select(z => z.examinationProtocolID).Contains(x.ID)) 
        on e.ID equals ep.ExaminationID into er 
       from r in er.DefaultIfEmpty() 
       select new { E = e, EP = r }; 
Смежные вопросы