查询对象时如何查看LINQ生成的SQL语句?

时间:2012-08-05 08:51:13

标签: c# linq-to-objects

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

2 个答案:

答案 0 :(得分:2)

Linq to objects不会为您生成SQL。只有在使用linq实体或linq到sql时才会出现这种情况。

答案 1 :(得分:2)

我很确定你不能使用SQL来对抗&#39; linq2objects&#39;,因此无法从那些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