Linq & ASP.NET MVC: как использовать «или» и «равно» в операторе соединения

1

Как перевести этот запрос sql в запрос linq, пожалуйста?

USE [BiblioDB]
 GO
 SELECT *
   FROM Exemplaire e
    LEFT JOIN location l
    ON e.ExemplaireId = l.ExemplaireId
    INNER JOIN Retour r
    ON l.LocationId is null or l.LocationId = r.LocationId
 Go

Я попробовал этот linq-запрос, но четвертая строка не работает.

 BiblioDBContext biblioDBContext = new BiblioDBContext();
 var query = from e in biblioDBContext.Exemplaires
           join l in biblioDBContext.Locations on e.ExemplaireId equals l.LocationId
           join r in biblioDBContext.Retours on l.LocationId == null || l.LocationId equals r.LocationId r.LocationId
 select e;
  • 0
    В чем ошибка?
  • 0
    Ошибка: оператор '||' не может применяться к операндам типа 'bool' и 'int'
Показать ещё 1 комментарий
Теги:
linq
asp.net-mvc

1 ответ

1
Лучший ответ

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

 BiblioDBContext biblioDBContext = new BiblioDBContext();
 var query = from e in biblioDBContext.Exemplaires
     join l in biblioDBContext.Locations on e.ExemplaireId equals l.ExemplaireId into el
     from l in el.DefaultIfEmpty()
     from r in biblioDBContext.Retours
     where (l.LocationId == null) || (l.LocationId.Equals(r.LocationId))
 select new {e, l, r};

Проблема заключается в отсутствующем DefaultIfEmpty(), которое необходимо для левых объединений.

  • 0
    @Sounouk Какие ошибки вы получаете? Как вы ожидаете, что мы поможем вам, если вы не дадите нам обратную связь, необходимую для решения вашей проблемы?
  • 0
    Я отредактировал свой ответ. Это работает сейчас? Если нет, пожалуйста, отправьте сообщение об ошибке.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню