質問: SitePage.GetAll().Select(c=> new { c.id, c.PageUrl, c.ParentId }); ``` 私はバックグラウンドで、レコードセット全体が他のすべての列(本当に大きなvarcharsを含むかもしれない)を含めて引っ張られたのか、あるいはDapperがこのクエリからSQLデータベースから要求する列を引き出すだけであるのか不思議です。私はそれが新しいものだと気づいていますが、私はDapper / LINQのやり取りをよりよく理解したいと思います。 同様の質問がここに掲載されました: select-specific-columns-using-linq-what-gets-transferredを使用しました。ポスターには2つの質問があり、一般的に好きなラムダ式も使用していませんでした。 これに対する答えは私の心を怒らせます(そして、おそらく私は慎重であり、明示的なSQLを介してあまりにも多くのコードを書いていると感じているので、私がコーディングする方法をかなり変えるかもしれません)。
回答: Dapperはラムダ式をSQLに変換しないので、Dapperが生成するSQLクエリは`SitePage`完全なインスタンスを返します。 Dapperの`GetAll`メソッドのシグネチャを見ているかどうかを簡単に知る方法です。 `IEnumerable`返すので、 `T`コレクションを返すことを意味します。そのため、後で使用する演算子(ケースの`Select`は、フルコレクションに適用されます。要するに、あなたは`GetAll`呼び出した後、Dapperの世界にいなくなりました。 過去の本格的なORMを使用した場合、Entity FrameworkやNHibernateのように、より多くの機能が必要であるというより、必ずしも優れているわけではありません。一部のAPIでは`IQueryable`返されます。実行されました。したがって、 `Select`や`Where`ような`IQueryable`で使用する演算子は、実際にクエリを変更します。 ORMは、反復処理または`ToList`または`ToArray`を呼び出して問合せを実現すると、問合せ式ツリーをSQLに変換し、その問合せをデータベースに送信します。