【问题标题】:How to view Generated SQL statements by LINQ when querying object?查询对象时如何查看LINQ生成的SQL语句?
【发布时间】:2012-08-05 17:14:19
【问题描述】:

当我们使用 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() 方法。谢谢

【问题讨论】:

  • 在您的示例中,您使用的是 LINQ to 对象。它没有 SQL,也没有什么可提取的。你为什么想要那个?

标签: c# linq-to-objects


【解决方案1】:

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

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

我假设你对调试查询感兴趣,还有另一个关于堆栈溢出的话题回答这个问题:How to debug a LINQ Statement

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不是。至少在 linq2objects 中没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多