Как сделать левое соединение в корж лёгкий конструктор запросов?
Я внедрил конструктор запросов korzh easy в веб-приложение с использованием asp.net mvc и sql server, чтобы клиенты могли создавать свои собственные запросы и анализировать данные. Я застрял в сценарии, где у меня есть несколько таблиц
Customer (CustId PK,Name,FriendId FK AddressBook.Id, BossId FK AddressBookId)
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
?
- Как сделать левый вход в
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
Можно ли определить условие соединения динамически со страницы пользовательского интерфейса в простой запрос?
Команда поддержки: К сожалению, у нас сейчас нет таких элементов управления / виджетов пользовательского интерфейса, поэтому вам нужно будет реализовать их самостоятельно.
Мы можем запланировать эту функциональность для будущих выпусков, но я не могу дать точные сроки для реализации сейчас.
Резюме: так что этой функции нет в этом инструменте, неудача для меня.