2010-06-12 109 views
2

這是我想寫的方法:(?有沒有更具體的接口,我應該使用)LINQ to SQL的報告表中查詢

public static IEnumerable<String> GetTableNames(this IQueryable<T> query) 
{ 
    //... 
} 

其中IQueryable的是LINQ到SQL查詢。

然後如果我有這樣的

var q = from c in db.Customers 
     from p in db.Products 
     from cp in db.CustomerProducts 
     where c.ID = 3 && cp.CustID == c.ID && p.ID == cp.ProdID 
     select new {p.Name, p.Version}; 
q.GetTableNames();// return ["Customers", "Products", "CustomerProducts"] 

基本上它會顯示所有這個查詢的分貝觸摸表的查詢,它是確定執行查詢摸不着頭腦太(因爲這是無論如何要發生)?有任何想法嗎?

(編輯:對不起,如果這是一個有點太「!給我德codez」,任何提示,部分解決方案,或爲什麼這是不可能的解釋將被視爲感謝路加福音)

回答

1

LINQ到-SQL允許您輕鬆捕獲TSQL - 只需設置.Log即可。那麼問題就是解析這個問題。我會誘惑來捕獲TSQL,並用SET STATISTICS IO ON在SSMS中播放它 - 這可以輕鬆解析每個表的結果。

+0

不會導致另一個往返服務器(除了實際運行查詢)?也許解析TSQL是要走的路... – luke 2010-06-12 07:42:56

0

你可以做DataContext.GetCommand(query).CommandText,然後解析查找FROM和JOIN子句(棘手的是笛卡爾(逗號)連接)。