我正在尝试使用 EntitySpaces 模拟一段 SQL。我正准备回退到好的 ol' 原始 SQL,但宁愿学习如何正确地做到这一点......
这是我试图重现的 SQL:
SELECT
CASE WHEN GL.SOURCE = 'AP' THEN (SELECT COMPANY FROM VEND WHERE VEND.ID = GL.ID)
WHEN GL.SOURCE = 'AR' THEN (SELECT COMPANY FROM CUST WHERE CUST.ID = GL.ID)
WHEN GL.SOURCE = 'SB' THEN (SELECT COMPANY FROM SBMASTER WHERE SBMASTER.ID = GL.ID)
ELSE '' END AS COMPANY
FROM GL
LEFT OUTER JOIN ACCT ON GL.ACCT = ACCT.ACCT
我一直在玩代码,但没有运气。这就是我目前所拥有的:
GlQuery qryGl = new GlQuery("qryGl");
AcctQuery qryAcct = new AcctQuery("qryAcct");
AcctQuery qryAcctSub = new AcctQuery("qryAcct");
VendQuery qryVendSub = new VendQuery("qryVend");
CustQuery qryCustSub = new CustQuery("qryCust");
SbmasterQuery qrySbmasterSub = new SbmasterQuery("qrySbmaster");
qryGl.Select
(
qryGl.Source.Case()
.When("AP").Then(qryVendSub.Select(qryVendSub.Company).Where(qryVendSub.Id == qryGl.Id))
.When("AR").Then(qryCustSub.Select(qryCustSub.Company).Where(qryCustSub.Id == qryGl.Id))
.When("SB").Then(qrySbmasterSub.Select(qrySbmasterSub.Company).Where(qrySbmasterSub.Id == qryGl.Id))
.Else("")
.End().As("COMPANY")
);
qryGl.LeftJoin(qryAcct).On(qryGl.Acct == qryAcct.Acct);
这给了我以下(显然是错误的!)输出:
SELECT
[COMPANY] = CASE
WHEN 'AP' THEN MyProject.Com.Data.VendQuery
WHEN 'AR' THEN MyProject.Com.Data.CustQuery
WHEN 'SB' THEN MyProject.Com.Data.SbmasterQuery
ELSE ''
END
FROM [GL] qryGl
LEFT JOIN [ACCT] qryAcct ON qryGl.[ACCT] = qryAcct.[ACCT]
将不胜感激将该子查询 SQL 放入 case 语句的任何帮助!
EntitySpaces 很新,所以希望它只是我错过的一些简单的东西......
干杯