Совокупный запрос NHibernate для отношения один ко многим

У меня есть следующие объекты:

<code>class Topic
{
    public virtual int Id {get; private set;} 
    public virtual ICollection<Vote> Votes {get; private set; }
}

class Vote
{
    public virtual Topic Topic {get; private set;}
    public virtual VoteType VotedTo {get; private set;} // enum VotedUp, VotedDown
}
</code>

Мне нужно загрузить из БД следующую информацию - все темы (идентификаторы, фактически имена, но в этом демонстрационном случае это не имеет значения) и еще два поляCountOfVotedUp, CountOfVotedDown (aggregates), Так что, как я понимаю, в мире SQL нам нужны объединения, группировка, регистр и количество.

Можно ли получить эту информацию с помощью LINQ с меньшим количеством операций с БД? Я имею в виду N + 1, дополнительные выборки, соединения и т. Д.

Все, что я пытался, - это использовать LINQ от NH, но он собирает запросы только по Topic.Id, и я не смог сосчитать ни одного из голосований.

Ответы на вопрос(1)

Решение Вопроса

что у вас есть сводный класс для хранения вашего результата:

public class  SummaryDTO
{
    public int TopicId { get; set; }
    public VoteType TypeOfVote { get; set; }
    public int VoteCount { get; set; }
}

затем

Vote voteAlias = null;
SummaryDTO result = null;

youNHSession.QueryOver<Topic>()
  .JoinAlias(x=> x.Votes, ()=>voteAlias)
  .SelectList(
    list=>list
      .SelectGroup(topic=>topic.Id).WithAlias(()=>result.TopicId)            
      .SelectGroup(()=>voteAlias.VotedTo).WithAlias(()=>result.TypeOfVote)
      .SelectCount(()=>voteAlias.VotedTo).WithAlias(()=>result.VoteCount ))
  .TransformUsing(Transformers.AliasToBean<SummaryDTO>())
  .List<SummaryDTO>();

Полагаю, это не совсем то, что вы ищете, но надеюсь, что это поставит вас на правильный путь.

 Akim Khalilov03 мая 2012 г., 16:51
Позвольте мне взять мой компьютер и проверить его ...
 Akim Khalilov11 мая 2012 г., 20:57
Будет играть с Criteria API.
 Akim Khalilov06 мая 2013 г., 23:30
jbl прямо здесь :) Пожалуйста, посмотрите мой текущий пример NHibernate QueryOver для отношения master-details one-to-many для выбора и агрегирования:gist.github.com/s-stude/5528308

Ваш ответ на вопрос