NHibernate:Criteria表达式,用于检索非null的一对一关联类

时间:2008-11-19 18:57:50

标签: c# nhibernate orm

我有两个与一对一映射关联的类:

<class name="Employee" table="Employees">
  ...
  <one-to-one name="Address" class="AddressInfo">
  ...
</class>

我想使用条件表达式来仅获取关联的Address类不为null的Employees,就像这样(我知道这不起作用):

IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
    .Add( Expression.IsNotNull("Address") )
    .List();

我想这可能是一个非常困难的问题,或者几乎没有人试图这样做?

2 个答案:

答案 0 :(得分:5)

您是否尝试为Address属性创建别名并检查Address的ID /主键是否为空?

类似的东西:

IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
    .CreateCriteria("Address", "address").Add( Expression.IsNotNull("Id") )
    .List();

答案 1 :(得分:0)

要隐式触发Alias / Join一对一,你不应该使用点符号吗?然后检查地址类中的任何字段:

IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
    .Add( Expression.IsNotNull("Address.Id") )
    .List();

这可能与Kareena的方法相同,但我相信这等于.CreateAlias()。使用CreateAlias,您可以指定FetchMode(使用的连接类型),但由于您需要具有相应地址的行,因此不应该是nessecary(因为INNER是默认值)。也不应该检查它是否为空。

IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
    .CreateAlias("Address")
    .List();