Может ли кто-нибудь сократить эти 3 оператора LINQ to SQL в один?

Хорошо, я пытаюсь получить все Компании, назначенные ОБЕИМ курсам, которые существуют в таблице сопоставления курсов.

В таблице сопоставления курсов есть 2 FK CourseID, которые указывают на два разных курса в одной таблице.

У каждого курса есть пакет, и компании назначаются пакетам.

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

Мне удалось это сделать (Изменить: по-видимому, нет, из-за ИЛИ, может ли кто-нибудь это исправить?), Используя 3 разных запроса LINQ, но я надеюсь, что есть способ сократить его до одного для краткости и производительность:

Bundle vegasBundle = (from cm in db.VegasToPegasusCourseMaps
                                   join c in db.Courses on cm.VegasCourseID equals c.CourseID
                                   join b in db.Bundles on c.BundleID equals b.BundleID
                                   where cm.VPCMapID == CourseMapID
                                   select b).FirstOrDefault();

Bundle pegasusBundle = (from cm in db.VegasToPegasusCourseMaps
                                    join c in db.Courses on cm.PegasusCourseID equals c.CourseID
                                    join b in db.Bundles on c.BundleID equals b.BundleID
                                    where cm.VPCMapID == CourseMapID
                                    select b).FirstOrDefault();

IQueryable<Company> companyAssigned = from cb in db.CompanyBundles
                                      join c in db.Companies on cb.CompanyID equals c.CompanyID
                                      where cb.BundleID == vegasBundle.BundleID || cb.BundleID == pegasusBundle.BundleID
                                      select c;

return companyAssigned.ToList();
5
задан MetaGuru 15 November 2011 в 21:09
поделиться