2
    public static IList<EmployeeObject> GetAllEmployee()
    {
        IList<EmployeeObject> emps = new List<EmployeeObject>();

        using (SqlConnection conn = new SqlConnection(connString))
        {
            connection.Open();
            //....
            using (SqlDataReader reader = sqlCommand.ExecuteReader())
            {
                while (reader.Read())
                {
                  //...add
                }
            }
         }
       return emps.ToList();
     }


public static IQueryable<EmployeeObject> QueryableSQL()
{
    IQueryable<EmployeeObject> queryable = EmployeeRepository.GetAllEmployee(); 
}

要求交叉检查 Lambda 表达式查询是否正确。这意味着 lambda 表达式是如何执行的,我没有使用实体框架,我在网上搜索过,但没有找到任何与我正在寻找的内容相关的博客。任何帮助 SQL 探查器?还是对象查询?任何能告诉我 sql 正在生成的东西。

var query = QueryableSQL().Where(employee => 
    employee.Interests.Any(interest => interest.Name ==  "Chess"));
4

1 回答 1

2

如果您使用的是 LINQ to SQL,则可以执行以下操作

  1. 实际上,您可以做的最简单的事情是查看以下ToString方法IQueryable

    IQueryable<Employee> query = ...; //your query
    var querySql = query.ToString();
    
  2. 您可以使用LogLinq 的属性DataContext

    using (var dc = new TestDataContext()) //your DataContext
    {
      dc.Log = Console.Out; //it's of TextWriter type, use any suitable
      IQueryable<Employee> query = ...; //your query
    
      //execute the query, as it'll output the query to the Log only after it's
      //really executed on the database
      foreach (var s in query)
      {
          //...
      }
    }
    

在 EF 中你可以使用ObjectQuery'sToTraceString方法:

using (var dc = new TestEntities())
{
    var query = ...;// your query
    var oquery = query as System.Data.Objects.ObjectQuery;
    Console.WriteLine(oquery.ToTraceString());
}

或使用 Visual Studio Intelli Trace...有关更多信息,请阅读:实体框架中的分析数据库活动


现在可以看到,它只是 LINQ to objects...所以 LINQ 根本不查询数据库。它对内存中的对象进行操作。好吧,Visual Studio 缺少任何用于 LINQ 的查询分析器。您可以尝试使用 LINQPad 来测试您的 LINQ 查询: www.linqpad.net/

于 2013-11-13T01:45:32.873 回答