我有以下情况我被卡住了。 我有一个名为ContactAssociation的实体,它包含(以及其他)属性Client和Contact。 我必须得到满足一些条件的客户的所有联系人。 条件是: 每个客户都有属性BusinessEntities,它是BusinessEntity的集合,每个BusinessEntity都有一个BusinessLevel。 这是代码,我相信这会让这更容易理解:
link.Session.QueryOver<ContactAssociation>(() => ca)
//.Fetch(asoc => asoc.Client)
.JoinAlias(() => ca.Client, ()=> client)
.Left.JoinQueryOver<BuEntry>(() => client.BuEntries, () => be)
.Where(() => client.ID == clientKey)
.Where(() => be.BuLevel.LevelNo > buLevel);
好的所以我写了这样的东西,我不断收到错误,找不到属性BuLevel.LevelNo 但它在模型中存在
我尝试了标准,但是我看到了同样的错误,只是在NHProfiler而不是Visual Studio中,并且Visual Studio中出现了更加神秘的错误。 无论如何...... 我最终用sql查询解决了这个问题但是我应该如何编写QueryOver和/或Criteria以获得正确的结果?
提前谢谢
P.S。
这是我的SQL查询:
careTeamMembers = link.Session.CreateSQLQuery(@"select c.* from ContactAssociation ca
inner join Contact c
on ca.contactkey = c.contactkey
left join ContactBu cb
on cb.contactkey = c.contactkey
left join BuEntry be
on cb.entrykey = be.entrykey
left join BuLevel bl
on be.levelkey = bl.levelkey
where ca.clientkey = :clientkey
and bl.levelno > :level")
.AddEntity(typeof(Contact))
.SetInt32("clientkey", clientKey)
.SetInt32("level", buLevel)
.SetMaxResults(1000)
.List<Contact>();
答案 0 :(得分:0)
你错过了BULevel上的联接
link.Session.QueryOver<ContactAssociation>(() => ca)
//.Fetch(asoc => asoc.Client)
.JoinAlias(() => ca.Client, ()=> client)
.Left.JoinQueryOver<BuEntry>(() => client.BuEntries, () => be)
.Where(() => client.ID == clientKey)
.JoinQueryOver<BuLevel>(() => be.BuLevel)
.Where(bu => bu.LevelNo > buLevel);