2012-08-05 58 views
-2

當我們使用LINQ到SQL,那麼很少有可視化器向我們展示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()方法。謝謝

+1

在你的榜樣,你正在使用LINQ to對象。沒有SQL,沒有提取。你爲什麼要這樣? – 2012-08-05 09:02:53

回答

2

我很確定你不能對'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不會爲你生成SQL。這隻會是如果你使用LINQ到實體或LINQ到SQL的情況。

+0

不是。至少不在linq2objects中。 – nothrow 2012-08-05 09:01:43

+0

@Yossarian。是的,我的錯誤。 – 2012-08-05 09:11:33