如何在korzh简单查询生成器中进行左连接?

问题描述:

enter image description here我已经在使用asp.net mvc和sql server的web应用程序中实现了korzh easy查询生成器,因此客户可以进行自定义查询并进行数据分析。我被困在场景中我有一些表格如何在korzh简单查询生成器中进行左连接?

  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.如何从表中获取数据如果同一个表有多个关系,其他表如CustomerAddressBook

  1. 如何在Easy Query构建器中执行左连接?
+0

@Sergiy你能帮我吗? –

+0

它允许你创建一个视图,如Vw_AddressBook吗?因此您可以加入表格并在一个查询中加入视图。 – Wendy

+0

我们可以在sql数据库中创建视图,并且它会显示在简单的查询生成器中,我们可以从查询生成器的视图中选择列。但是,我们无法使用简单查询构建器在一个查询中选择表和视图中列的组合,因为它们之间没有外键关系。基于外键关系自动轻松查询连接表。如果您选择两个不具有任何FK关系的不同表或视图,则简单查询会引发这些表彼此不相关的错误。 –

我张贴此聊天,因为它可能可以帮助别人: -

这里是一个支持团队沟通: 我: 我们正在使用从SQL数据库这个http://demo.easyquerybuilder.com/asp-net-mvc/我们将数据装载,使用此代码:

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与“地址簿> 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#代码,现在如果我会尝试从两个表中获取数据,它将应用左连接,但如何我可以选择吗? e从UI页面动态加入(左/右/内)?当我们试图从两个表中获取数据时,简单的查询是否提供了选择连接类型的选项?例如,在我最后的场景中,如果我只想得到那些有Boss的客户姓名和老板名字(这里我必须应用内部联接),该怎么办?

正如我以前的SQL查询

选择cust.Name如客户名称,frnd.Name作为朋友,不中。从客户名称为老板作为客户左加入地址簿作为frnd在cust.FriendId = frnd.Id左加入AddressBook作为Bos on cust.BossId = Bos.Id

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

左加入通讯录作为FRND上cust.FriendId = frnd.Id LEFT JOIN通讯录作为博斯上cust.BossId = Bos.Id

是它可以定义从UI页面中很容易查询动态加入的条件?

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

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

总结:所以这个功能不在这个工具里,对我来说运气不好。