Я использую linq в сочетании с структурой сущностей уже несколько месяцев, и мне интересно узнать о подзапросах и объединениях.
Я часто использую подзапросы, как это:
(from department in
(from hospital in hospitalRepository.Hospitals
where hospital.Id == viewModel.DestinationHospitalId
select hospital.Departments).Single()
select new { Value = department.Id, Text = department.Name }).ToList();
Я никогда не использовал ключевое слово join, потому что мне кажется, что он слишком сложен. Я думаю, что для объединения мне нужны внешние ключи в моих доменных объектах, которые мне не очень нравятся, и я чувствую, что подзапросы более интуитивно понятны. Тем не менее, я почти всегда вижу, как люди используют объединения в linq, что заставляет меня задуматься о том, намного ли лучше объединения или что люди просто привыкли использовать объединения из SQL.
Кроме того, я столкнулся с проблемой, связанной с моими подзапросами, которая заключается в том, что когда Hospitals
ObjectSet не содержит больницы с идентификатором, который я хочу. Я не знаю, как заставить подзапрос возвращать пустую коллекцию. Видимо, по умолчанию для списка null
. Теперь я использую Single и ловлю исключение, однако я бы предпочел, чтобы мой запрос просто возвращал пустой список.
Должен ли я просто начать использовать соединения? Разве я не хочу, чтобы мой запрос возвращал пустой список и обрабатывал этот случай как исключение? Было бы лучше, если бы по умолчанию список был пустым?
Некоторая предыстория. Цель этого запроса - заполнить раскрывающийся список в моем представлении на основе выбранного значения другого раскрывающегося списка. У другого выпадающего списка не может быть выбора, из-за которого первый выпадающий список должен быть пустым. Так что это не на самом деле исключение.
Заранее спасибо.