2012-05-12 13 views
5

Tengo un escenario en el que necesito seleccionar solo una/varias columnas de una entidad, pero varios elementos secundarios en una consulta. He estado intentando con proyecciones pero obtengo un error en la propiedad de colecciones. Esta es una situación tan normal, pero no puede encontrar información sobre proyectar colecciones, solo propiedades.Proyecciones NHibernate: cómo proyectar las colecciones

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>(); 

error devuelto es:

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

posibles duplicados de [proyecciones NHibernate QueryOver - proyectar colecciones de DTO] (http://stackoverflow.com/questions/10535961/nhibernate-queryover-projections-projecting-collections-to-dto) – Baz1nga

+0

favor no repetir preguntas ... – Baz1nga

+0

Ha seleccionado dos propiedades, tal vez .Lista () – Anton

Respuesta

2

¿Qué hay de la inversión de la consulta (suponiendo que la Orden tiene una propiedad del cliente):

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[]>(); 
Cuestiones relacionadas