あなたの場合、はい。セットをコンテキストに渡し、そのセットに対してクエリを実行しています。IEnumerable<post>
ビューで定義されたへの変換により、両方のクエリがデータベースからすべての投稿を取得し、アプリケーションのメモリ内で Linq クエリを実行したとさえ思います。データベースに対して単一のクエリのみを実行する場合は、次の例を使用して、ロードされたオブジェクトをビューに渡す必要があります。
var q = context.post.ToList();
ただし、新しいビュー モデルを作成し、コントローラーで 2 つの個別のクエリを実行することをお勧めします。ビューはダンプする必要があり、追加のロジックを含めないでください。
var postModel = new PostViewModel {
Question = context.post.FirstOrDefault(o => o.parent == null),
Answers = cotnext.post.Where(o => o.parent != null).ToList()
};
return View(postModel);
編集:
これらのクエリを見ていると、Concat
次のようなものを使用して、データベースへの1回のラウンドトリップでそれらを実行することさえ可能であるはずです:
var result = context.post.Where(o => o.parent != null)
.Concat(context.post.Where(o => o.parent == null)
.OrderBy(...).Take(1))
.ToList();
var postModel = new PostViewModel {
Question = result.FirstOrDefault(o => o.parent == null),
Answers = result.Where(o => o.parent != null).ToList()
};
テストされていませんが、試すことができます。