QueryOver: seleccione columnas de la subconsulta
¿Cómo puedo seleccionar / proyectar valores de una subconsulta de una tabla diferente en mi consulta principal?
Tengo un modelo NH como este:
[Serializable]
public class MyModel
{
public virtual int Id {get; set;}
//more mapped values
....
//unmapped values
public virtual string ValueFromOtherTable {get;set;}
}
Y quiero llenar ValueFromOtherTable con una combinación izquierda como esta:
Select mt.*, ..., ot.ValueFromOtherTable from MyModelTable mt left
join OtherTable ot ON (somecondition)
donde MyModelTable es la tabla asignada a MyModel-class. Quiero llenar ValueFromOtherTable (sin mapeo NH) seleccionando todos los valores de mt (para llenar las columnas mapeadas NH) y luego usando OtherTable quiero llenar ValueFromOtherTable.
No puedo unir ambas tablas a través deQueryOver
como no existe una correlación directa padre-hijo en el modelo, entoncesJoinAlias
oJoinQueryOver
no funcionará MiMainQueryOver
consultasMyModelTable
.
ALTERNATIVA:
La alternativa es obtener primero todos los valores de MyModelTable y luego usar las propiedades allí para consultar OtherTable. Sin embargo, esto resultará en unSELECT N+1
problema (para cada modelo deMyModel
seleccione alguna otra tabla ...) y también hace que el código sea muy complicado.
¿Hay una buena manera de resolver este problema o es la única forma de llenar MyModel utilizando la alternativa descrita?