Как сделать левое соединение в корж лёгкий конструктор запросов?

Я внедрил конструктор запросов korzh easy в веб-приложение с использованием asp.net mvc и sql server, чтобы клиенты могли создавать свои собственные запросы и анализировать данные. Я застрял в сценарии, где у меня есть несколько таблиц

  1. Customer (CustId PK,Name,FriendId FK AddressBook.Id, BossId FK AddressBookId)
  2. AddressBook (Id,Name)

результат, который я хочу получить с помощью простого конструктора запросов:

select Cust.Name , frnd.Name as friend, bos.Name from Customer as Cust
left join AddressBook as Frnd on Cust.FriendId = frnd.Id
left join AddressBook as bos on Cust.BossId = bos.Id

Я могу получить этот результат в sql Сервер легко, но в Easy Query builder У меня нет выбора join (left or right or inner), таблицы получаются inner join автоматически, если между ними есть отношения по внешнему ключу. В этом случае я не могу собрать друзей и босса вместе.

Итак, мой вопрос: 1. Как получить данные из таблицы Если одна и та же таблица имеет несколько взаимосвязей, другая таблица, как Customer а также AddressBook?

  1. Как сделать левый вход в Easy Query строитель?

1 ответ

Я публикую этот чат, потому что он может кому-то помочь:-

Вот связь с командой поддержки: Я: Мы используем это http://demo.easyquerybuilder.com/asp-net-mvc/ И мы загружаем данные из базы данных sql, используя этот код:

var eqService = new EqServiceProviderDb();

eqService.Paging.Enabled = true;
eqService.StoreQueryInSession = true;
eqService.SessionGetter = key => Session[key];
eqService.SessionSetter = (key, value) => Session[key] = value;

Korzh.EasyQuery.DataGates.SqlClientGate sqlGate = new Korzh.EasyQuery.DataGates.SqlClientGate();
eqService.ModelLoader = (model, modelName) =>
{
    model.Clear();
    sqlGate.ConnectionString = ConfigurationManager.AppSettings["our connection string to sql db here"].ToString();
    sqlGate.Connected = true;
    model.FillByDbGate(sqlGate, FillModelOptions.Default);
};
//For T-SQL use these settings
//  var connection = context.Database.Connection;
eqService.Formats.SetDefaultFormats(FormatType.MsSqlServer);
eqService.Formats.UseSchema = false;  //schema is not used in SQL Server CE
eqService.Connection = sqlGate.Connection;
eqService.Connection.ConnectionString = ConfigurationManager.AppSettings["our connection string to sql db here"].ToString();
//eqService.Connection.Open();

Согласно нашему сценарию у нас есть таблица AddressBook и таблица клиентов. Таблица клиентов имеет два столбца BossId и FriendId, имеющих отношение FK к столбцу "Адресная книга> Id". Мы хотим, чтобы все записи клиента были с друзьями и начальником, независимо от того, есть у клиента друг или начальник. Мы можем получить требуемый результат, используя левое соединение в SQL-запросе:

" Select cust.Name as CustomerName,frnd.Name as Friends,bos.Name as Boss from Customer as cust left join AddressBook as frnd on cust.FriendId=frnd.Id Left join AddressBook as Bos on cust.BossId=Bos.Id "

Команда поддержки: Итак, вам просто нужно добавить следующий фрагмент кода сразу после

model.FillByDbGate:

var tbl1 = model.Tables.FindByName("AddressBook");
var tbl2 = model.Tables.FindByName("Customer");
var link = model.Links.FindByTables(tbl1, tbl2);
link.LnkType = TableLink.LinkType.Left;

Я: Спасибо за ваш ответ, я понимаю, что мы можем поместить левое соединение в таблицы буксировки в коде C#, и теперь, если я попытаюсь получить данные из двух таблиц, к ним будет применено левое соединение, но как я могу выбрать соединение? (слева / справа / внутри) динамически со страницы пользовательского интерфейса? Предоставляет ли простой запрос какую-либо возможность выбора типа объединения, когда мы пытаемся получить данные из двух таблиц? Например, в моем последнем сценарии, что если я хочу получить только имя клиента и имя его босса, у которого есть Босс (здесь я должен применить внутреннее соединение).

Как и в моем предыдущем SQL-запросе

Выберите cust.Name в качестве CustomerName, frnd.Name в качестве друзей, bos.Name в качестве Boss из Customer в качестве cust, оставьте присоединиться к AddressBook в качестве frnd на cust.FriendId=frnd.Id Оставьте присоединиться к AddressBook в качестве Bos на cust.BossId=Bos.Id

Я применяю время буксировки левого соединения на одном столе, чтобы получить друзей и Бос.

оставлен присоединиться к адресной книге как frnd на cust.FriendId=frnd.Id оставлен присоединиться к адресной книге как Bos на cust.BossId=Bos.Id

Можно ли определить условие соединения динамически со страницы пользовательского интерфейса в простой запрос?

Команда поддержки: К сожалению, у нас сейчас нет таких элементов управления / виджетов пользовательского интерфейса, поэтому вам нужно будет реализовать их самостоятельно.

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

Резюме: так что этой функции нет в этом инструменте, неудача для меня.

Другие вопросы по тегам