我试图将两个Criterias分开,但结果不是预期的。 我试图获得一个人的所有书籍(在他的个人图书馆或他的团队的图书馆中)。
第一标准://返回1
myBooks = session.CreateCriteria<Book>()
.CreateCriteria("Library")
.CreateAlias("Users", "usr")
.Add(Restrictions.Eq("usr.Id", myUserId))
.List().Count;
第二标准//返回1
myTeamsBooks = session.CreateCriteria<Book>()
.CreateCriteria("Library")
.CreateAlias("Teams", "grp")
.Add(Restrictions.In("grp.Id", myTeamsIds))
.List().Count;
Disjunction //预期2,返回0 !!
allMyBooks = session.CreateCriteria<Book>()
.CreateCriteria("Library")
.CreateAlias("Users", "usr")
.CreateAlias("Teams", "grp")
.Add(Restrictions.Disjunction()
.Add(Restrictions.Eq("usr.Id", myUserId))
.Add(Restrictions.In("grp.Id", myTeamsIds))
)
.List().Count;
在分离中我做错了什么?
我和.Add(Restrictions.Or(
也尝试过相同的结果。
任何帮助将不胜感激!
答案 0 :(得分:2)
此案例中的问题与 JOIN 类型有关。我们需要LEFT
一个,但默认的(未指定)是INNER
。因此,请像这样调整CreatAlias
,并返回正确的结果:
.CreateAlias("Users", "usr", JoinType.LeftOuterJoin)
.CreateAlias("Teams", "grp", JoinType.LeftOuterJoin)