質問: Connection.Query(sql).Count(); return result; } ``` Dapperはこのクエリを(内部的に) `SELECT COUNT(*) FROM MyTable`から`SELECT COUNT(*) FROM MyTable`変換し、最後に`.Count()`を見ますか? 同様に、 `SingleOrDefault()`場合は`SELECT TOP 1 * FROM MyTable`から変換されますか? 私はそれに応じてクエリを生成するNHibernateの世界から来た。私はDapperについて確信が持てません。私はMS Accessで作業しているので、生成されたクエリを確認する方法はありません。
回答: いいえ、dapperはクエリを調整しません。これを伝える直接的な方法は単純です: `IEnumerable...`対`IQueryable...`返し`IQueryable...`か?最初の場合は、ローカルのメモリ内メカニズムのみを使用できます。 具体的には*、デフォルトでは* 、 `Query`は実際に完全に生成された`List<>`返します。 LINQの`Count()`メソッドはそれを認識し、リストの`.Count`プロパティにアクセスします。したがって、すべてのデータがデータベースからフェッチされます。 あなたは、カウントのためにデータベースを依頼したい場合は、 *カウントにデータベースをお願いし*ます。 実際にデータベースに送信されるものを表示するメカニズムについては、ミニ・プロファイラーを使用しています。それは素晴らしい作品です。 注:正確に1つの行をクエリしているとき: `QueryFirstOrDefault` (および期待する他のバリアント)が存在し、内部的に最適化を行います(ADO.NETへのヒントを含みますが、ただし、クエリ*は*調整され*ません* 。場合によっては、プロバイダ(ダッパーではない)が助けてくれるかもしれませんが、最終的には、最初の行だけが必要な場合は*、データベースに最初の行* ( `TOP`など)を*問い合わせてください* 。