我已经使用asp.net mvc和sql server在Web应用程序中实现了korzh easy查询构建器,因此客户可以进行自定义查询并进行数据分析。我陷入了有一些桌子的情况
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
,表格会自动生成Customer
他们之间的外键关系。在这种情况下,我无法让朋友和老板在一起。
所以我的问题是:
1.如何从表中获取数据如果同一个表有多个关系,那么另一个表如AddressBook
和Easy Query
?
var $subMenus = $(".menu_item").find(".sub-menu");
$(".menu_item").on("click", function() {
$subMenus.addClass("hidden");
$(this).find(".sub-menu").removeClass("hidden");
});
构建器中进行左连接? 答案 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控件/小部件,因此您需要自己实现它。
我们可以为将来的版本安排此功能,但我现在无法给出确切的实施时间表。
摘要:所以此功能不在此工具中,对我来说运气不好。