2012-05-12 17 views
5

Masz scenariusz, w którym muszę wybrać tylko jedną/kilka kolumn z obiektu, ale wiele dzieci w zapytaniu. Próbowałem z prognozami, ale otrzymałem błąd we właściwościach kolekcji. Jest to tak normalna sytuacja, ale nie można znaleźć informacji o projektowaniu kolekcji - tylko właściwości.Projekcje NHibernate - jak wyświetlać kolekcje

Customer customerAlias = null; 
Order orderAlias = null; 
var list = _session.QueryOver<Customer>(() => customerAlias) 
        .JoinAlias(x => x.Orders,() => orderAlias, JoinType.LeftOuterJoin) 
        .Select(
         Projections.Property(() => customerAlias.Name), 
         Projections.Property(() => customerAlias.Orders))//this is the issue 
        .List<object>(); 

Błąd zwracany jest:

System.IndexOutOfRangeException : Index was outside the bounds of the array 
+1

możliwe duplikat [projekcjach NHibernate QueryOver - wystające kolekcje DTO] (http://stackoverflow.com/questions/10535961/nhibernate-queryover-projections-projecting-collections-to-dto) – Baz1nga

+0

proszę nie powtarzać pytań ... – Baz1nga

+0

Wybrałeś dwie właściwości, może .List () – Anton

Odpowiedz

2

Jak o odwrócenie zapytanie (zakładając, że zamówienie ma właściwość klienta):

var list = _session.QueryOver<Order>() 
       .Select(
        Projections.Property(o => o.Customer.Name), 
        Projections.Property(o => o.OrderProperty1), 
        Projections.Property(o => o.OrderProperty2)) // etc.. 
       .List<object[]>();