我有一个与可选 UserData 具有 1-1 关系的用户。他们在数据库中共享相同的标识符。
User
Id(x => Id, "id")
References<UserData>(x => x.UserData, "id");
UserData
Id(x => Id, "id")
我想查询所有没有可选数据的用户。 但此查询对 User ID 列进行 null 检查。
var list = session.QueryOver<User>()
.Where(x => x.UserData != null)
如果我使用 HasOne 也是如此。
最佳答案
假设您的映射是这样的:
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
关于nhibernate - 对可选引用进行 QueryOver 和 null 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25353231/