次のコードがあります。
public List<anEntity> Get(int page, int pagesize, Func<anEntity, IComparable> orderby)
{
using (var ctx = new MyContext())
{
return ctx.anEntity.OrderBy(orderby).Skip(pagesize * page).Take(pagesize).ToList();
}
}
データベース プロファイル (SqlServer 2012) を確認すると、"TOP" 句がない恐ろしい全テーブル スキャンが表示されます。
興味深い部分:
同様のことを行うが、具体的な orderby を指定する場合:
return ctx.anEntity.OrderBy(x => x.aField).Skip(pagesize * page).Take(pagesize).ToList();
プロファイルには、美しい「TOP」句が表示されます。
「オーダーバイ」の可能性ごとに1つずつ、多くのメソッドを持つことは避けたいと思います。どんなヒントでも大歓迎です。