6

Foo имеет заголовок.
Бар ссылки Foo. У меня есть коллекция с барами.
Мне нужна коллекция с Foo.Title.Выберите проблему n + 1

Если у меня есть 10 баров в коллекции, я буду называть db 10 раз.

bars.Select (х => x.Foo.Title)

На данный момент это (используя NHibernate Linq и я не хочу, чтобы уронить его) возвращает коллекцию Bar.

var q = from b in Session.Linq<Bar>() 
       where ... 
       select b; 

Я прочитал, что говорит Айенде about this.
Другие связанные question.
Немного documentation.
И еще один связанный blog post.
Может быть this может помочь?
Что относительно this?
Возможно, MultiQuery - это то, что мне нужно? :/

Но я до сих пор не могу «скомпилировать» это в правильном решении.

Как избежать выбора n + 1?

ответ

3

Это не сработало:

var q = from b in Session.Linq<Bar>().Expand("Foo.Title") 
       where ... 
       select b; 

Но этот вид помогло:

var q = from b in Session.Linq<Bar>().Expand("Foo") 
       where ... 
       select b; 

..но Теперь вещь, которая собирается использовать репозиторий не знает, что он загружается FOOS тоже.
Любые идеи, как сделать это более явным?

Идея состоит в том, чтобы изменить имя на FindBarsWithFoos().

По крайней мере, он работает.