具有空多对一的 NHibernate 投影
NHibernate Projection With Null Many-To-One
criteria.CreateAlias("ChildObject", "c");
IProjection fullProjection = Projections.ProjectionList()
.Add(Projections.Property("Item"), "Item")
.Add(Projections.Property("c.SubItem"), "ChildObject.SubItem")
此 Object 具有属性 Item 和 ChildObject。
ChildObject 有一个 属性 SubItem.
NHibernate 可以使用此投影成功查询并列出所有带有 ChildObject 的对象。
但是,ChildObject 在某些行上可以为空。这个投影似乎完全跳过了它们。他们永远不会进入我的变形金刚。我认为 NHibernate 根据要求进行这些预测,以便在标准中不为空。
所以我虽然可以通过以下方式胜过它:
Projections.Conditional(Restrictions.Eq("ChildObject", null), nullProjection, fullProection)
nullProjection 根本没有投影 ChildObject,但它只是抱怨....
Both true and false projections must return the same types.
有没有办法做这个投影并获得可为空的值?还是我必须做两个单独的查询?
这与左联接而不是内联接有关。
criteria.CreateAlias("ChildObject", "c");
将创建 SQL 语句作为内连接,但使用....
criteria.CreateAlias("ChildObject", "c", LeftJoin);
强制执行左连接,并在值不存在时进行处理。
criteria.CreateAlias("ChildObject", "c");
IProjection fullProjection = Projections.ProjectionList()
.Add(Projections.Property("Item"), "Item")
.Add(Projections.Property("c.SubItem"), "ChildObject.SubItem")
此 Object 具有属性 Item 和 ChildObject。
ChildObject 有一个 属性 SubItem.
NHibernate 可以使用此投影成功查询并列出所有带有 ChildObject 的对象。
但是,ChildObject 在某些行上可以为空。这个投影似乎完全跳过了它们。他们永远不会进入我的变形金刚。我认为 NHibernate 根据要求进行这些预测,以便在标准中不为空。
所以我虽然可以通过以下方式胜过它:
Projections.Conditional(Restrictions.Eq("ChildObject", null), nullProjection, fullProection)
nullProjection 根本没有投影 ChildObject,但它只是抱怨....
Both true and false projections must return the same types.
有没有办法做这个投影并获得可为空的值?还是我必须做两个单独的查询?
这与左联接而不是内联接有关。
criteria.CreateAlias("ChildObject", "c");
将创建 SQL 语句作为内连接,但使用....
criteria.CreateAlias("ChildObject", "c", LeftJoin);
强制执行左连接,并在值不存在时进行处理。