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 брал.

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<Guid>(@"SpecId").ToString();
                        //Обработка результатов
		}
 
		reader.Close();
	}
}

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

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