Стремительная загрузка с запросом Linq с ограничением на детали - PullRequest
0 голосов
/ 15 сентября 2011

Как я могу написать запрос со встроенным поставщиком linq NHibernate, в том числе с нетерпением загрузки и ограничения на детали?Например

    public class Library
    {
       public Library()
       {
         Books = new List<Book>();
       }

       public virtual int Id { get; set; }
       public virtual string Name { get; set; }
       public virtual IList<Book> Books { get; protected internal set; }
    }

    public class Book
    {
       public Book()
       {
          Pages = new List<Page>();
       }

       public virtual int Id { get; set; }
       public virtual Library Library { get; set; }
       public virtual string Title { get; set; }
    }

следующий запрос показывает, что мне нужно, но не загружается с нетерпением

    var query = from master in session.Query<Library>()
                from detail in master.Books
                where detail.Title == detailValue
                select master;

Следующий запрос не работает ...

    var query = from master in session.Query<Library>()
                // not allowed - causes Runtime error
                .FetchMany(m => m.Details.Where(d => d.Value == detailValue))
                select master;

Большое спасибо заранее.

Карстен

1 Ответ

1 голос
/ 15 сентября 2011

Вместо этого вы можете рассмотреть возможность использования queryOver: -

Book book = null;

var query =
  Session.QueryOver<Library>()
  .Fetch(f => f.Books).Eager
  .Left.JoinAlias(f => f.Books, () => book)
  .Where(() => actor.book == detailValue);

Возможно, я ошибаюсь, но не думаю, что провайдер NH LINQ может сейчас это поддержать.

Также обратите внимание на .left, это важно, см. Этот пост в блоге по причинам, почему

...