powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ: Left Join с несколькими условиями
4 сообщений из 4, страница 1 из 1
LINQ: Left Join с несколькими условиями
    #39065553
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, как на LINQ написать Left Join с несколькими условиями?

Данные
DirContractors - это Контрагента
DirContracts - это Договора контрагенты
У контрагента могут быть Договора, а может и не быть, могут быть действующие, а могут быть и не действующие и т.д.
Но суть в том, чтобы сделать несколько "условий" в Лефт Джоине, типа:

Код: sql
1.
LEFT JOIN DirContract ON (условие-1)and(условие-2)or(условие-3))and(условие-4)...



Вот реальный пример

Код: c#
1.
2.
3.
4.
5.
6.
from dirContractors in db.DirContractors

join dirContracts in db.DirContracts on dirContractors.DirContractorID equals dirContracts.DirContractorID into Contract1
from Contract in Contract1.DefaultIfEmpty()

where (Contract.DirContractDateEnd == null || Contract.DirContractDateEnd >= DateTime.Now)



То есть тут использовалось WHERE и если у Контрагента нет действующего договора он вообще не отобразится, а его нужно отобразить при любых условиях. То есть нужно все условия "впихнуть" в Left Join, вот как это на Линке сделать ... ?
...
Рейтинг: 0 / 0
LINQ: Left Join с несколькими условиями
    #39065567
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
LINQ: Left Join с несколькими условиями
    #39065568
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать вложенным запросом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
                        join dirContracts in 
                        (
                            from dirContracts in db.DirContracts
                            where (dirContracts.DirContractDateEnd == null || dirContracts.DirContractDateEnd >= DateTime.Now)
                            select dirContracts
                        ) 
                        on dirContractors.DirContractorID equals dirContracts.DirContractorID into Contract1
                        from Contract in Contract1.DefaultIfEmpty()


Но у меня в БД 70 000 контров и пол лимона договоров к ним, это будет пол лимона договоров подыматься, т.к. я во внутреннем запросе не могу сделать выборку договоров по нужному Контрагенту.
Код: sql
1.
where dirContracts.DirContractorID == dirContractors.DirContractorID
...
Рейтинг: 0 / 0
LINQ: Left Join с несколькими условиями
    #39065570
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique
Блин, спасибо, тема закрыта ....
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ: Left Join с несколькими условиями
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]