Извлекать Top X только с помощью Fluent NHibernate hasMany

#nhibernate #fluent-nhibernate

#nhibernate #fluent-nhibernate

Вопрос:

У меня есть следующее отображение в Fluent-NHibernate Map

 public class PostMap : ClassMap<Post>
{
    public PostMap()
    {
        Id(i => i.Id).GeneratedBy.GuidComb();
        Map(x => x.SiteId);
        Map(x => x.Message);
        Map(x => x.DateCreated);
        Map(x => x.DateModified);
        HasMany(x => x.Comments)
            .OrderBy("DateCreated DESC")
            .ReadOnly()
            .Not.LazyLoad();
    }
}
  

К каждому сообщению много комментариев, что я хотел бы сделать, так это вернуть только top 5 из базы данных, а не удалять их в коде.

Ответ №1:

Вы можете сделать это вручную. Игнорируйте свойство Comments из Post сопоставления и загружайте его вручную с помощью Take(X) :

 // query posts
foreach (var post in posts)
{
    post.Comments = Session.QueryOver<Comments>()
                        .Where(x => x.PostId == post.Id)
                        .Take(X)                       
                        .Future();
}

  

С помощью Future вместо List этого для всех комментариев будет выполняться один обход базы данных туда и обратно.

Ответ №2:

Должно быть возможно с фильтрами. Читайте здесь:http://nhibernate.info/doc/nh/en/index.html#filters

Комментарии:

1. Как здесь помогают фильтры? Мне действительно нужно предложение TOP / TAKE, а не WHERE.