我有一个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
答案 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
});