如何做左边加入korzh easy查询构建器?

时间:2017-06-14 11:53:36

标签: sql-server asp.net-mvc query-builder easyquery

enter image description here我已经使用asp.net mvc和sql server在Web应用程序中实现了korzh easy查询构建器,因此客户可以进行自定义查询并进行数据分析。我陷入了有一些桌子的情况

  1. Customer (CustId PK,Name,FriendId FK AddressBook.Id, BossId FK AddressBookId)
  2. AddressBook (Id,Name)
  3. 我想通过简单查询构建器获得的结果是

    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,表格会自动生成Customer他们之间的外键关系。在这种情况下,我无法让朋友和老板在一起。

    所以我的问题是: 1.如何从表中获取数据如果同一个表有多个关系,那么另一个表如AddressBookEasy Query

    1. 如何在var $subMenus = $(".menu_item").find(".sub-menu"); $(".menu_item").on("click", function() { $subMenus.addClass("hidden"); $(this).find(".sub-menu").removeClass("hidden"); }); 构建器中进行左连接?

1 个答案:

答案 0 :(得分:2)

我发帖聊天是因为它可以帮助某人: -

以下是与支持团队的沟通: 的我: 我们正在使用这个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表和customer表。客户表有两列BossId和FriendId与“Addressbook> Id”列具有FK关系。我们希望所有客户与朋友和老板的记录,无论客户有朋友还是老板。我们可以通过在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#代码中的两个表中,现在如果我将尝试从两个表中获取数据,它将应用于左连接在他们身上,但我如何从UI页面动态选择连接(左/右/内)?当我们尝试从两个表中获取数据时,简单查询是否提供了选择连接类型的任何选项?例如,在我的上一个场景中,如果我只想获得那些客户的名字和他们的老板的名字谁有Boss(这里我必须申请内部联接)。

与我之前的sql查询一样

选择cust.Name为CustomerName,frnd.Name为Friends,bos.Name为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

我在同一桌子上应用左连接两次以获得frnd和Bos。

左边连接AddressBook as frnd on cust.FriendId = frnd.Id左边连接AddressBook作为Bos on cust.BossId = Bos.Id

是否可以在简单查询中从UI页面动态定义连接条件?

支持团队: 不幸的是,我们现在没有这样的UI控件/小部件,因此您需要自己实现它。

我们可以为将来的版本安排此功能,但我现在无法给出确切的实施时间表。

摘要:所以此功能不在此工具中,对我来说运气不好。