1

次のエンティティがあります (DB テーブルに直接マップされます)。

public class SurveyQuestion
{
public int SurveyQuestionID { get; set; }
public string QuestionText { get; set; }
public DateTime QuestionDate { get; set; }
public List<Answer> Answers { get; set; }
}

public class Answer
{
public int AnswerID { get; set; }
public int SurveyQuestionID { get; set; }
}

次を返すクエリを実行したいと思います(ここでは明確にするためにクラスとして表現し、多くの失敗した試みの1つからコピー/貼り付けするクラスがあるため):

public class SurveySearchItem
{
public int SurveyQuestionID { get; set; }
public string QuestionText { get; set; }
public int AnswerCount { get; set; }
}

このクエリで、日付でフィルタリングし、カウントで並べ替え、X 行をスキップし、X 行をすべて SQL サーバー側で取得したいと考えています。私はprocを書いたり、このインラインのSQLを持ったりすることを避けようとしています.他の場所では、nhibernateのクエリオーバーまたは基準を使用するだけで必要なことをすべて行うことができました.

私は多くの有望なリンク (ほとんどは SO にあります) を検索し、さまざまなことを試しましたが、これを実現する方法が見つからないようです。自分でSQLを書かずにできることではない場合(または、エンティティがマップされた検索ビューを作成する可能性があります。私もそれを検討しました)、それで問題ありません。QueryOver などを使用してこれを行う方法が必要なように思えますが、私はおそらく初心者すぎてそれを理解できません。

4

1 に答える 1

1

私は最終的にDBのビューを使用し、nhibernateを介してそれにマップされたクラスを作成しました(そして、この質問を約6か月間投稿したことを忘れていました)。それが絶対的に最も簡単な解決策であり、それ以来、他のプロジェクトの同様のシナリオで同じことをしなければなりませんでした. proc または inline sql ルートがより良い選択だった可能性があると主張する人もいるかもしれませんが、view メソッドは他のすべてのコードとの一貫性を維持していました (別のテーブルにマップされた別のエンティティのように見えるという点で)。

于 2012-10-31T20:48:56.077 に答える