-2

当我们使用 linq to sql 时,很少有可视化工具向我们展示 linq 生成了什么 sql,但是当我们通过 linq 查询对象时,有没有办法获得类似的 sql 语句。例如

string[] names =
        new string[] { "Jon Skeet", "Marc Gravell", "tvanfosson", 
                       "cletus", "Greg Hewgill", "JaredPar" };

    var results = from name in names
                  where name.StartsWith("J")
                  select name;

我们可以从结果中提取 sql 吗?

有人建议使用下面的函数来拥有 sql....

public static class MyExtensions
{
public static string ToTraceString<T>(this IQueryable<T> t)
{
    string sql = "";
    ObjectQuery<T> oqt = t as ObjectQuery<T>;
    if (oqt != null)
        sql = oqt.ToTraceString();
    return sql;
}
}

是真的吗?如果是,你能告诉我如何将我的结果转换为IQueryable,然后调用ToTraceString()方法。谢谢

4

2 回答 2

2

Linq to objects 不会为您生成 SQL。仅当您使用 linq to entity 或 linq to sql 时才会出现这种情况。

于 2012-08-05T08:53:01.933 回答
2

我很确定您不能对“linq2objects”使用 SQL,因此无法从这些对象中获取 SQL。

Linq 2 对象的工作原理基本上是 sql 中的表扫描。执行时,它会逐行读取源代码行,并对每一行应用过滤器/选择器。例如,请参见http://blogs.msdn.com/b/wesdyer/archive/2007/01/03/how-linq-to-objects-queries-work.aspx

我假设您对调试查询感兴趣,还有另一个关于堆栈溢出的主题回答了这个问题:如何调试 LINQ 语句

于 2012-08-05T09:01:13.290 回答