在NHibernate中查询超类时,从子类左连接返回属性

时间:2011-11-09 21:18:35

标签: nhibernate nhibernate-criteria

我有一个ICriteria,它返回超类Animal的属性。现在我想在结果中包含子类Bird的几个属性。对于其他子类,这些属性应返回null。我正在使用table-per-subclass继承。有没有办法在不添加大量DetachedCriteria的情况下执行此操作? NHibernate已经在子类表上留下了连接;有没有办法从这些连接中投射值?

更新:我需要能够对子类属性进行排序和过滤,整个查询需要支持分页。

这是我的模特:

public abstract class Animal
{
    public long Id { get; set; }
    public string Name { get; set; }
}

public class Cat : Animal
{
    public int WhiskerCount { get; set; }
}

public class Bird : Animal
{
    public long WingSpan { get; set; }
}

鉴于以下表格:

Animal:
 Id | Name      
----+--------------
 1  | Sylvester
 2  | Tweety
 3  | Maru
 4  | Big Bird

Cat:
 Id | WhiskerCount
----+--------------
 1  | 6
 3  | 12

Bird:
 Id | Wingspan     
----+--------------
 2  | 0.5
 4  | 10

我想要以下结果集:

 Id | Name       | Wingspan
----+------------+-------------
 1  | Sylvester  | <null>
 2  | Tweety     | 0.5
 3  | Maru       | <null>
 4  | Big Bird   | 10

1 个答案:

答案 0 :(得分:0)

var results = session.CreateCriteria<Animal>()
    .List<Animal>()
    .Select(a => new 
    {
        Id = a.Id,
        Name = a.Name,
        Wingspan = (a is Bird) ? ((Bird)a).Wingspan : (int)null
    });