У меня есть объект root, у которого есть свойство, которое является коллекцией.
Например:
I have a Shelf object that has Books.
// Now
public class Shelf
{
public ICollection<Book> Books {get; set;}
}
// Want
public class Shelf
{
public IQueryable<Book> Books {get;set;}
}
То, что я хочу выполнить, - это вернуть коллекцию, которая является IQueryable, чтобы я мог запускать пейджинг и фильтрацию коллекции непосредственно из родительского элемента.
var shelf = shelfRepository.Get(1);
var filtered = from book in shelf.Books
where book.Name == "The Great Gatsby"
select book;
Я хочу, чтобы этот запрос выполнялся специально NHibernate, а не получал все, чтобы загрузить всю коллекцию, а затем проанализировать ее в памяти (что и происходит в настоящее время при использовании ICollection).
Обоснование этого заключается в том, что моя коллекция может быть огромной, десятки тысяч записей, и получить весь запрос может bash моя база данных.
Я хотел бы сделать это неявно, чтобы, когда NHibernate увидит IQueryable в моем классе, он знает, что делать.
Я посмотрел на поставщика NHibernate LINQ, и в настоящее время я принимаю решение взять большие коллекции и разбить их на свой собственный репозиторий, чтобы я мог делать явные вызовы для фильтрации и подкачки.
LINQ To SQL предлагает нечто похожее на то, о чем я говорю.