そのため、過去数時間答えを探していましたが、意味のあるものは何も見つからないようです。
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; }
}
私がやろうとしているのは、プレーヤーのリストと、多数の異なるゲームで獲得したポイントを取得することです (game
ゲームのリストを含む上記の複数のエンティティがあります)。したがって、クエリの最終結果は次のList<PlayerSummary>
ようになります。探している SQL は次のようになります。
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
また、構造エンティティに対してクエリ/合計を行う必要があることに注意してください。これが含まれている理由です。
TypeSafe を使用して NHibernate でこれを実行しようとしていますが、アプリケーションをデータベースに依存しないようにする計画があるため、直接 SQL を使用することはできません (現在は Postgres を使用していますが、SQL サーバーに移行する可能性があります)。点)。
これらの魔法の文字列を使用する「HQL」のものを特に使用したくないので、Linq または QueryOver/Query を使用しようとしています。
誰かが私を正しい方向に向けることができますか?