Sql Nhibernate左联接中的多个条件
将此sql查询转换为nhibernate需要一些帮助Sql Nhibernate左联接中的多个条件,sql,nhibernate,Sql,Nhibernate,将此sql查询转换为nhibernate需要一些帮助 select a.ID, count(b.ID) from appusers a left join weeklytasks b on a.ID = b.TaskOwner and b.taskstatus = 1 group by a.ID 如果不知道您的实体、映射和使用的技术(icretriaapi、QueryOver、Linq),很难回答这个问题 但我可以使用QueryOver建议此解决方案: AppU
select a.ID, count(b.ID)
from appusers a
left join weeklytasks b on a.ID = b.TaskOwner and b.taskstatus = 1
group by a.ID
如果不知道您的实体、映射和使用的技术(icretriaapi、QueryOver、Linq),很难回答这个问题 但我可以使用QueryOver建议此解决方案:
AppUser ownerAlias = null;
WeeklyTask taskAlias = null;
var result = Session.QueryOver(() => taskAlias)
.JoinAlias(x => x.TaskOwner,
() => ownerAlias,
NHibernate.SqlCommand.JoinType.RightOuterJoin,
Restrictions.Where(() => taskAlias.Status == 1))
.SelectList(list => list
.SelectGroup(x => ownerAlias.Id)
.SelectCount(x => x.Id))
.List<object[]>();
AppUser-ownerAlias=null;
WeeklyTask taskAlias=null;
var result=Session.QueryOver(()=>taskAlias)
.JoinAlias(x=>x.TaskOwner,
()=>ownerAlias,
NHibernate.SqlCommand.JoinType.RightOuterJoin,
限制。其中(()=>taskAlias.Status==1))
.SelectList(list=>list
.SelectGroup(x=>ownerAlias.Id)
.SelectCount(x=>x.Id))
.List();
或者这个:
var result = Session.QueryOver<WeeklyTask>()
.Where(x => x.Status == 1)
.Right.JoinQueryOver(x => x.TaskOwner)
.SelectList(list => list
.SelectGroup(x => x.TaskOwner.Id)
.SelectCount(x => x.Id))
.List<object[]>();
var result=Session.QueryOver()
.其中(x=>x.状态==1)
.Right.JoinQueryOver(x=>x.TaskOwner)
.SelectList(list=>list
.SelectGroup(x=>x.TaskOwner.Id)
.SelectCount(x=>x.Id))
.List();
请注意,在这种方法中,您的
周任务
实体必须包含对AppUser
实体的映射引用。如果不知道您的实体、映射、使用的技术(ICretria API、QueryOver、Linq),很难回答
但我可以使用QueryOver建议此解决方案:
AppUser ownerAlias = null;
WeeklyTask taskAlias = null;
var result = Session.QueryOver(() => taskAlias)
.JoinAlias(x => x.TaskOwner,
() => ownerAlias,
NHibernate.SqlCommand.JoinType.RightOuterJoin,
Restrictions.Where(() => taskAlias.Status == 1))
.SelectList(list => list
.SelectGroup(x => ownerAlias.Id)
.SelectCount(x => x.Id))
.List<object[]>();
AppUser-ownerAlias=null;
WeeklyTask taskAlias=null;
var result=Session.QueryOver(()=>taskAlias)
.JoinAlias(x=>x.TaskOwner,
()=>ownerAlias,
NHibernate.SqlCommand.JoinType.RightOuterJoin,
限制。其中(()=>taskAlias.Status==1))
.SelectList(list=>list
.SelectGroup(x=>ownerAlias.Id)
.SelectCount(x=>x.Id))
.List();
或者这个:
var result = Session.QueryOver<WeeklyTask>()
.Where(x => x.Status == 1)
.Right.JoinQueryOver(x => x.TaskOwner)
.SelectList(list => list
.SelectGroup(x => x.TaskOwner.Id)
.SelectCount(x => x.Id))
.List<object[]>();
var result=Session.QueryOver()
.其中(x=>x.状态==1)
.Right.JoinQueryOver(x=>x.TaskOwner)
.SelectList(list=>list
.SelectGroup(x=>x.TaskOwner.Id)
.SelectCount(x=>x.Id))
.List();
请注意,在这种方法中,WeeklyTask
实体必须包含对AppUser
实体的映射引用