Возвращать свойства из левых соединений подкласса при запросе суперкласса в NHibernate - PullRequest
1 голос
/ 10 ноября 2011

У меня есть ICriteria, который возвращает свойства из суперкласса Animal. Теперь я хочу включить в результаты несколько свойств из подкласса Bird. Для других подклассов эти свойства должны возвращать null. Я использую наследование таблицы на подкласс. Есть ли способ сделать это, не добавляя много 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 голосов
/ 10 ноября 2011
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
    });
...