Kyl*_*vak 11 c# nhibernate queryover
我在层次结构中有以下对象A > B > C > D.每个对象都映射到一个表.我正在尝试使用QueryOver编写以下SQL:
SELECT B
FROM A, B, C, D
WHERE A.ID = B.ID
AND B.ID = C.ID
AND C.ID = D.ID
WHERE A.NUMBER = 'VALUE'
AND D.NAME IN ('VALUE1', 'VALUE2')
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有C#代码:
string[] entityNames = entityAttributes.Select(e => e.Name).ToArray();
string customerNumber = 2;
return session.QueryOver<B>()
.JoinQueryOver(b => b.C)
.JoinQueryOver(c => c.D)
.WhereRestrictionOn(d => d.Name).IsIn(entityNames)
.List<B>();
Run Code Online (Sandbox Code Playgroud)
这里缺少的是A > B链接.我无法弄清楚如何添加连接以A限制它在NUMBER字段上.我尝试了以下但是.JoinQueryOver(b => b.C)正在寻找类型A而不是寻找类型B.
return session.QueryOver<B>()
.JoinQueryOver(b => b.A)
.Where(a => a.Number == customerNumber)
.JoinQueryOver(b => b.C) **//Looks for type A instead of B**
.JoinQueryOver(c => c.D)
.WhereRestrictionOn(d => d.Name).IsIn(entityNames)
.List<B>();
Run Code Online (Sandbox Code Playgroud)
如何A在仍返回类型的同时向此查询添加类型B?
Fab*_*ber 13
你可以使用别名加入你的表格
B tB = null;
A tA = null;
C tC = null;
D tD = null;
var qOver = HibSession.QueryOver<B>(() => tB)
.JoinAlias(() => tB.A, () => tA, JoinType.LeftOuterJoin)
.Where(() => tA.Number == customerNumber)
.JoinAlias(() => tB.C, () => tC, JoinType.LeftOuterJoin)
.JoinAlias(() => tC.D, () => tD, JoinType.LeftOuterJoin)
.Where(Restrictions.On(() => tD.Name).IsIn(entityNames))
.List<B>();
Run Code Online (Sandbox Code Playgroud)
我希望它有用.
| 归档时间: |
|
| 查看次数: |
7119 次 |
| 最近记录: |