0

我正在使用 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 条件(而不是在数据库上)。

4

1 回答 1

3

你需要让它返回 IQueryable。通过返回 IEnumerable,您不允许 IQueryable 提供程序转换表达式树的其余部分。查询运算符的 LINQ to Objects 版本适用于 IEnumerable。LINQ to SQL 需要 IQueryable 版本。

于 2012-06-14T18:40:07.023 回答