MVCMiniProfiler を使用して、いくつかのデータベース クエリをプロファイリングしています。あるクエリでは、コードで定義したクエリの Where 部分を表示できません。
コードは次のとおりです。
MyAppDataContext.cs:
public partial class MyAppDataContext : System.Data.Linq.DataContext {
public static MyAppDataContext CreateNewContext() {
var sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyAppConnectionString"].ToString());
var profiledConnection = new ProfiledDbConnection(sqlConnection, MiniProfiler.Current);
return new MyAppDataContext(profiledConnection);
}
}
プログラムコード:
MyAppDataContext DataContext = MyAppDataContext.CreateNewContext();
IEnumerable<Requests> Entities = DataContext.Requests;
using (profiler.Step("get data")) {
var dataset = Entities.Where(x => x.ControleStatus == 4).OrderBy(x => x.ID)
}
私も試しました:
using (profiler.Step("get data")) {
var dataset = from x in Entities
where x.ControleStatus == 4
orderby x.ID
select x;
}
これは、MVC Mini Profiler が表示するものです。
SELECT [t0].[ID], [t0].[DatumOntvangst], [t0].[DatumRapport], [t0].[FK_SID],
[t0].[ControleStatus], [t0].[SStatus] FROM [dbo].[Request] AS [t0]
ご覧のとおり、Where ステートメントはありません。ところで: 出力には正しい結果が含まれていますが、このクエリが完了するまでに 30 秒かかるため、すべてのデータが最初にデータベースから取得され、次に (データベースではなく) コードで where 条件が適用されるのではないかと考えています。