ユーザーが要求した行を返すページング API がありますが、コレクション全体ではなく、一度に非常に多くの行しか返しません。API は設計どおりに機能しますが、(適切なページ計算のために) 利用可能なレコードの総数を計算する必要があります。API 内では、Linq2Sql を使用し、最終的にリクエストを行う前に IQueryable で多くの作業を行います。カウントを取得するときは、次のように呼び出します: totalRecordCount = queryable.Count();
結果として得られる SQL は興味深いものですが、不要な Order By が追加され、クエリが非常に高価になります。
exec sp_executesql N'SELECT COUNT(*) AS [value]
FROM (
SELECT TOP (1) NULL AS [EMPTY]
FROM [dbo].[JournalEventsView] AS [t0]
WHERE [t0].[DataOwnerID] = @p0
ORDER BY [t0].[DataTimeStamp] DESC
) AS [t1]',N'@p0 int',@p0=1
IQueryable を使用しているため、SQL サーバーに送信する前に IQueryable を操作できます。
私の質問は、OrderBy を含む IQueryable が既にある場合、Count() を呼び出す前にその OrderBy を削除することは可能ですか?
のように: totalRecordCount = クエリ可能。NoOrder .Count();
そうでなければ、大したことはありません。OrderBy の方法について多くの質問がありますが、Linq 式から OrderBy を削除することに関する質問はありません。
ありがとう!