この件について複数の質問を見てきましたが、それらは 2 年 (またはそれ以上) 経過していたので、これについて何か変化があったかどうかを知りたいです。
基本的な考え方は、グリッドビューにデータを入力し、カスタム ページングを作成することです。したがって、結果と行数も必要です。
SQL では、これは次のようになります。
SELECT COUNT(id), Id, Name... FROM ... WHERE ...
素敵な単純なクエリですべてを取得します。ただし、一貫性を保ち、Linq2Entities を使用したいと考えています。
これまでのところ、2 つのクエリ (SQL サーバーに対して) でこのアプローチを使用しています。ただし、それを最適化し、代わりに単一のクエリを使用したいと思います。
私はこれを試しました:
var query = from o in _db.Products
select o;
var prods = from o in query
select new
{
Count = query.Count(),
Products = query
};
これにより、非常に厄介で長いクエリが生成され、本当に不要なクロス結合や、私が本当に必要としない、または望んでいないその他のものがあります。
ページングされた結果とすべてのエンティティの数を 1 つの単純なクエリで取得する方法はありますか? ここで推奨されるアプローチは何ですか?
アップデート:
FutureQueries を試してみましたが、何か間違っているか、実際に 2 つのクエリを実行しています。これは私のSQLプロファイラーを示しています:
-- Query #1
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[Products] AS [Extent1]
WHERE 1 = [Extent1].[CategoryID]
) AS [GroupBy1];
そして次の行:
-- Query #1
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name],
[Extent1].[Price] AS [Price],
[Extent1].[CategoryID] AS [CategoryID]
FROM [dbo].[Products] AS [Extent1]
WHERE 1 = [Extent1].[CategoryID];
C# コード:
internal static List<Product> GetProducts(out int _count)
{
DatabaseEntities _db = new DatabaseEntities();
var query = from o in _db.Products
where o.CategoryID == 1
select o;
var count = query.FutureCount();
_count = count.Value;
return query.Future().ToList();
}
私は何か見落としてますか?私のプロファイラーによると、クエリに行を追加したことを除いて、まったく同じことを行います(-クエリ#1)。