NHibernate Queryover - как вернуть только дочернюю коллекцию - PullRequest
1 голос
/ 07 октября 2011

У меня возникли трудности со следующим запросом nhibernate. Я, вероятно, слишком усложняю вещи, но вот проблема:

  • У меня есть объект с именем AuctionStatistic, который ссылается на аукцион (это однонаправленное письмо, и у меня нет ссылок с аукционов на статистику)
  • Я хотел бы запросить статистическую таблицу, найти все идентификаторы аукциона и отозвать только те из них, которые соответствуют определенному порогу, то есть 500 лучших аукционов по просмотрам
  • После того, как я получил топ X (в этом примере я жестко запрограммировал 10000 просмотров), я хочу вернуть идентификатор аукциона и имя. Для этого конкретного запроса мне не нужны никакие данные, хранящиеся в таблице статистики (хотя они используются в другом месте и не являются избыточными)

Я подумал, что могу использовать что-то вроде следующего, чтобы получить обратно только аукционы, но, поскольку я запрашиваю AuctionStatistic, он ожидает, что выбранное значение будет иметь тип AuctionStatistic (или их список)

var auctions = _session.QueryOver<AuctionStatistic>().Where(c => c.ViewCount > 10000).Fetch(x=>x.Auction).Eager.Select(x=>x.Auction);

Может кто-нибудь предложить лучший способ сделать это?

Спасибо

JP

1 Ответ

1 голос
/ 07 октября 2011

Без двунаправленной связи это, вероятно, ваш лучший выбор.

Auction auctionAlias = null;
AuctionDTO dto = null;

var auctionDtos = _session.QueryOver<AuctionStatistic>()
    .Where(c => c.ViewCount > 10000)
    .JoinAlias(x => x.Auction, () => auctionAlias)
    .SelectList(list => list
        .Select(() => auctionAlias.id).WithAlias(() => dto.id)
        .Select(() => auctionAlias.name).WithAlias(() => dto.name))
    .TransformUsing(Transformers.AliasToBean<AuctionDTO>())
    .List<AuctionDTO>();
...