我有一个与可选UserData有1-1关系的用户。它们在db中共享相同的标识符。
User
Id(x => Id, "id")
References<UserData>(x => x.UserData, "id");
UserData
Id(x => Id, "id")
我想查询没有可选数据的所有用户。 但是此查询会对“用户ID”列进行空检查。
var list = session.QueryOver<User>()
.Where(x => x.UserData != null)
如果我使用HasOne,情况也是如此。
答案 0 :(得分:2)
假设你的映射是这样的:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("UserTable");
Id(x=>x.Id).Column("Id");
HasOne(x => x.Data);
}
}
public class UserDataMap : ClassMap<UserData>
{
public UserDataMap()
{
Table("UserDataTable");
Id(x => x.Id).Column("Id");
Map(x=>x.DataText).Column("DataText");
}
}
您可以尝试:
UserData userDataAlias = null;
var results = session.QueryOver<User>()
.Left.JoinQueryOver(x=>x.Data,()=>userDataAlias)
.WhereRestrictionOn(y=>y.Id).IsNull
.List();
带有LEFT OUTER JOIN
和IS NULL
子句的结果查询将如下所示:
SELECT
this_.Id as Id14_1_,
userdataal1_.Id as Id13_0_,
userdataal1_.DataText as DataText13_0_
FROM
UserTable this_
left outer join
UserDataTable userdataal1_
on this_.Id=userdataal1_.Id
WHERE
userdataal1_.Id is null