2014-01-25 4 views
0

У меня LINQ, он отлично работает. Мой вопрос: как преобразовать его в выражение Lambda?Преобразуйте этот LINQ в выражение Lambda?

var searchResults = from study in dataContext.Studies 
    join location in dataContext.Locations 
     on study.LocationID equals location.LocationID 
    join doctorLocation in dataContext.DoctorLocations 
     on location.LocationID equals doctorLocation.LocationID 
    join doctor in dataContext.Doctors 
     on doctorLocation.DoctorID equals doctor.DoctorID 
    where doctor.DoctorID == doctorId 
    select study; 

Я думаю, что LINQ более естественен для меня (похож на SQL-скрипт). Однако в этом случае я просто хочу преобразовать его в Lambda Expression, но я не смог заставить его работать.

я застрял на:

var searchResults = dataContext.Studies.Where(x => 
    x.Location.DoctorLocations.FirstOrDefault() != null && 
    x.Location.DoctorLocations.FirstOrDefault().DoctorID == doctorId); 

это работает только для FirstOrDefault. Поскольку существует несколько DoctorLocations, я не могу это написать.

+1

Что именно вы пробовали и не могли бы сделать работу? Пожалуйста, поделитесь им. –

+0

обновлен в исходном посте. Я не знаком с Ламдой, поэтому застрял. – urlreader

ответ

2

Попробуйте это:

var searchResults = dataContext.Studies.Where(x => 
    x.Location != null 
    && x.Location.DoctorLocations.Any(dl => dl.DoctorID == doctorId)); 

вы получите все Studies, связанные, по меньшей мере, один DoctorLocation с DoctorID равна doctorId

0
var searchResults = dataContext.Studies 
           .Include(x => x.Locations) 
           .Include(x => x.DoctorLocations) 
           .Include(x => x.Doctors) 
           .Where(x => x.[InheritedPathToDoctor].DoctorId == id) 
           .Select(x => x.[InheritedPathToStudy].Study) 
           .FirstOrDefault() OR .ToList() 

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

Вам требуется включить для каждого класса и того, где довольно понятно.

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