Quindi ho passato le ultime ore a cercare una risposta e non riesco a trovare nulla che abbia senso.nibernare queryover con join complessi su entità non correlate
public class Game
{
public virtual Guid ID { get; set; }
public virtual ResultStructure Structure { get; set; }
public virtual List<Result> Results { get; set; }
}
public class Result
{
public virtual Player Player { get; set; }
public virtual int Position { get; set; }
}
public class ResultStructure
{
public virtual Guid ID { get; set; }
public virtual List<ResultOutcomes> Outcomes { get; set;}
}
public class ResultOutcomes
{
public virtual int Position { get; set; }
public virtual int Points { get; set; }
}
public class PlayerSummary
{
public virtual Player Player { get; set; }
public virtual int Points { get; set; }
}
Quello che sto cercando di fare è ottenere una lista dei giocatori ei punti che hanno guadagnato attraverso una moltitudine di diversi giochi (ci sono più entità di cui sopra game
che contengono elenchi di giochi). Così il risultato finale della query sarebbe List<PlayerSummary>
L'SQL che sto cercando sarebbe simile a questa:
SELECT p.*, Sum(rs.points) FROM result r
JOIN player p on r.playerid = p.id
JOIN game g on r.gameid = g.id
JOIN resultstructure rs on g.resultstructureid = rs.id
JOIN resultoutcomes ro on rs.id = ro.resultstructureid AND ro.position = r.position
nota, ho anche bisogno di fare qualche interrogazione/sommando contro l'entità struttura che è per questo che è incluso.
Sto cercando di farlo con NHibernate, utilizzando il materiale di tipo Safe, e il mio piano è che l'applicazione sia indipendente dal database, quindi non posso usare l'SQL diretto (al momento sta usando Postgres, ma potrei passare a Server SQL ad un certo punto).
Non voglio particolarmente utilizzare il materiale "HQL" in cui si usano quelle stringhe magiche, quindi sto cercando di usare Linq o QueryOver/Query.
Qualcuno può indicarmi la giusta direzione?
Questa è la ** situazione ** esatta in cui è necessario utilizzare HQL. "Stringhe magiche" non significa quello che pensi che significhi. –
Voglio davvero il tipo di cose sicure, comprendo l'HQL ish, e ho apprezzato che probabilmente farà ciò di cui ho bisogno, ma mi piacerebbe mantenere tutto uguale, e sto usando Query nella maggior parte delle parti. – Martin
@DiegoMijelshon Ho aggiunto la mia soluzione, potrei elaborare il motivo per cui dovrei usare HQL sulla soluzione che ho trovato? – Martin