QueryOver: selecione colunas da subconsulta
Como posso selecionar / projetar valores de uma subconsulta de uma tabela diferente na minha consulta principal?
Eu tenho um 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;}
}
E eu quero preencher ValueFromOtherTable com uma junção esquerda como esta:
Select mt.*, ..., ot.ValueFromOtherTable from MyModelTable mt left
join OtherTable ot ON (somecondition)
onde MyModelTable é a tabela mapeada para MyModel-class. Quero preencher ValueFromOtherTable (sem mapeamento de NH), selecionando todos os valores de mt (para preencher as colunas mapeadas por NH) e, em seguida, usando OtherTable, desejo preencher ValueFromOtherTable.
Não consigo juntar as duas tabelas viaQueryOver
como não existe correlação direta entre pais e filhos no modelo,JoinAlias
ouJoinQueryOver
não vai funcionar. MinhasMainQueryOver
consultasMyModelTable
.
ALTERNATIVA:
A alternativa é primeiro obter todos os valores de MyModelTable e, em seguida, usar as propriedades para consultar OtherTable. No entanto, isso resultará em umaSELECT N+1
problema (para cada modelo deMyModel
selecione alguma outra tabela ...) e também torna o código muito complicado.
Existe uma boa maneira de resolver esse problema ou a única maneira de preencher o MyModel usando a alternativa descrita?