質問: **前書き** nhibernateに関連するこの質問のように、Entity Framework 6にこのようなものが存在するのかどうか疑問に思っていました。私はいくつかの調査を行いましたが、使用可能なものは何も見つかりませんでした。 使用してページ分割の結果を照会することに加えて`.Skip(x)`と`.Take(y)` 、私たちは、ページネーションを適用する前に、当社の*where句に*一致するすべてのアイテムの数を取得したいです。 LINQクエリは、 *where句が*適用された変数を変数に入れているので、2回、1回はカウントを、もう1回はページングされた結果を得ることができます。 しかし、パフォーマンス上の理由から、RAW SQLクエリでCOUNT(*)OVER()を使用する場合と同じように、両方のクエリを1つのクエリで実行する必要があります。 **質問** Entity Frameworkは何とか`COUNT(*) OVER()`サポートしていますか?そうでない場合は、これを実装するための探索を開始する場所を指し示すことができます。 **提案** 最初に、 `IQueryable`拡張メソッドを作成することを考えました: `CountOver(out long totalCount)`ですが、これはまだクエリを構築しているので機能しない可能性があります。 次に、エンティティモデルで使用できる属性`[CountOver]`を導入することを考えました。 ``` public class Person { public string Fullname { get; set; } [CountOver] public long TotalCount { get; set; } } ``` ソースを変更できれば、後者は実装するのが難しくないかもしれませんが、現時点ではこれが可能かどうかわかりません...
回答: LINQには概念的にCOUNT()OVER()に変換されるクエリ演算子はありません。しかし、クエリをCount()とその行の両方に再利用し、その結果を選択することができます。 たとえば、次のようなもの ``` var q = db. . . ; var q2 = from r in q select new { r, count = q.Count() }; ```