Добавление условного соединения в Entity Framework 4.0 - PullRequest
0 голосов
/ 09 июля 2011

Я пытаюсь выполнить внутреннее соединение в EF4, но только если выполняется определенное условие.У меня есть такая функция:

List<Articles> Search(int? postSiteId) {
    var myquery =
      from
          articles
      in
          context.Articles
      where
          articles.IsDeleted = 0;

      if(postSiteId != null) {
          // Add an inner join on the Posts table and check that Posts.SiteId = postSiteId ---
      }
}

Я не уверен, как добавить соединение и условие внутри оператора if, вне основного запроса.Я не нашел ничего в поиске в течение нескольких часов.

Я не уверен, что объединение необходимо.Если я добавлю условие where: query = query.Where(article => article.Posts.Any(p => p.SiteId == postSiteId.Value)), узнает ли оно, что делать соединение там?Или это сделает подвыбор?

1 Ответ

2 голосов
/ 09 июля 2011

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

Вы можете присоединиться к себе, просто убедившись, что вы снова выбрали исходное значение ... но если вы действительно просто заинтересованы в том, чтобы выяснить,сообщения имеют заданный идентификатор сайта, ваш вариант «Любой», вероятно, чище.Нормальное объединение в конечном итоге будет возвращать дубликаты статей, если существует несколько подходящих постов.Вы можете использовать Distinct, но это кажется немного бессмысленным.

...