データを入力するのにうまく動作するEF 6とMVC 5を使用するアプリがありますが、その一部を表示しようとすると問題が発生します。私のエンティティの基本的なレイアウトは、次の図で見ることができます。EF 6とMVC 5の子データと孫データを照会して表示するにはどうすればよいですか?
私は悩みを抱えている最初の部分は、データを照会し、フィルタリングです。私は調査とサインオフが存在するが、承認はしていないが、施設や関係するデータのリストを返すことを望む。ストレートSQLでは、動作するようになりましたクエリは次のとおりです。
SELECT *
FROM Premises p LEFT OUTER JOIN Approvals a ON a.Id = p.Id
JOIN Surveys s ON s.PremiseId = p.Id
JOIN SignOffs so ON so.Id = s.Id
WHERE a.ApprovedBy IS NULL
私が始めたコードは次のようである:
var premises = Premises.Include(p => p.Approval)
.Include(p => p.Surveys)
.Include(p => p.Surveys.Select(s => s.SignOff));
これは、は*子データを含むすべてのレコードを返すように見えますが、それをフィルタリングしようとするとサインオフレコードを持つレコードだけが取得されますが、承認されていないレコードは取得できません。
var premises = Premises.Include(p => p.Approval).Where(p => p.Approval.ApprovedBy == null)
.Include(p => p.Surveys)
.Include(p => p.Surveys.Select(s => s.SignOff).Where(s => s.Signature != null));
私はこのコードを使用している場合は、私はこのエラーを取得:
パス式はタイプに定義されたナビゲーションプロパティを参照する必要があります含めます。参照ナビゲーションプロパティには点線のパスを使用し、コレクションナビゲーションプロパティにはSelect演算子を使用します。 パラメータ名:パス
私は別のものを試して、多くの周りにこのクエリを変更したので、私は私がやっていることすべてのわからないんだけど、私は最初のWhere
文は、それ自体でうまくいくかもしれないと思うが、 2番目のエラーは間違いなく発生します。 要求されたデータを正しくフィルタリングして返すようにクエリを構造化する必要はありますか?
また、実際にテストできないため、がと表示され、すべてのデータと子データが返されると述べています。このために私のRazor CSHTMLページを書いてみると、子供や孫のデータを知ることはできません。もし私が何を入力すればエラーになるのでしょうか?このデータをページ上でどのように参照する必要がありますか?