join
Технические вопросы
7.x

JOIN по двум колонкам С#

Обычно если мы в ESQ используем произвольные или обратные связи то обычно строиться LEFT OUTER JOIN с наименованием колонки по которой присоединил.

Например:

SELECT CC.SpecializationId
FROM TsMarketingApplication tsma
     LEFT OUTER JOIN Activity a ON a.Id=tsma.TsActivityId

Если корневая схема TsMarketingApplication то будет

.AddColumn("[Activity:Id:TsActivityId].Имя нужной колонки");

Но если мне нужен JOIN по двух колонках сразу, как быть?
например:

SELECT CC.SpecializationId
FROM TsMarketingApplication tsma
     LEFT OUTER JOIN Activity a ON a.Id=tsma.TsActivityId
     LEFT OUTER JOIN ContactCareer CC ON CC.ContactId = A.OwnerId AND CC.AccountId=A.AccountId

Заранее признателен

Нравится

5 комментариев

Виталий, здравствуйте,

Ознакомтесь, пожалуйста, со статьей на академии по данному вопросу:

https://academy.terrasoft.ru/documents/technic-sdk/7-9/ispolzovanie-ent…

Хорошего вечера!

С уважением,
Валерия

Но там как раз описывается пример с JOIN по одной колонке. Я правильно понимаю что ESQ такого не умеет?

Здравствуйте, Виталий.

Подробную информацию о возможностях ESQ, Вы можете найти в SDK.

Так же, для построение более сложных запросов, рекомендую Вам смотреть на более низкоуровневый класс Select. Данный класс используется внутри ESQ и позволяет построить более сложные запросы к базе данных.

SELECT

Я бы через Select брал.
[csharp]
Select select = new Select(userConnection)
.Column(@"ContactCareer", @"SpecializationId").As("SpecId")
.From(@"TsMarketingApplication")

.LeftOuterJoin("Activity").On("Activity", "Id").IsEqual("TsMarketingApplication", "TsActivityId")
.LeftOuterJoin("ContactCareer").On("ContactCareer", "ContactId").IsEqual("Activity", "OwnerId")
.And("ContactCareer", "AccountId").IsEqual("Activity", "AccountId")

as Select;

using (DBExecutor executor = userConnection.EnsureDBConnection())
{
using (IDataReader reader = executor.ExecuteReader(select.GetSqlText(), select.Parameters))
{
while (reader.Read())
{
string result = reader.GetColumnValue(@"SpecId").ToString();
//Обработка результатов
}

reader.Close();
}
}
[/csharp]

Спасибище!!!

Показать все комментарии