2011-12-02 18 views
0

我想使用((ObjectQuery)IQueryable).ToTraceString()來獲取並調整將由LINQ執行的SQL代碼,然後使用SqlCommand.ExecuteReader運行它,然後反饋到Linq生成相同的結果對象,就好像它沒有改變一樣。如何調整由Linq生成的SQL代碼並獲得執行結果中相同的對象類型

我調整它,使它返回相同的結構(相同的列),例如,我可能只是添加註釋,以便能夠輕鬆過濾SQL Server Profiler中的查詢。

很容易將這些結果用於像Count或1-4列這樣的事情,而無需映射到相同的結果Linq類型。

但是,當我有一個返回由Linq表達式生成的複雜類型的查詢時,我想將SqlDataReader結果反饋給實體框架以獲得用於生成該查詢的相同Linq結果類型?

我正在尋找調整基礎Linq查詢的任何方式,它不必通過SqlCommand。

+0

你想要做什麼類型的「調整」?你可以做很多事情來影響底層的SQL,因此可以預先實現你想要的效果。 – jklemmack

+0

1)將表名替換爲不屬於edmx的另一個表或視圖名。 2)插入註釋以識別和過濾SQL Server Profiler中的查詢。 – alpav

回答

1

您可以使用SqlQuery<T>Entity SQL syntax中編寫自己的查詢,但儘管它具有在查詢字符串中插入註釋的語法,但註釋不會顯示在SQL概要分析器中。

因此,如果插入評論是您需要的唯一調整,那麼您必須找到其他內容,例如custom logging。對於其他「調整」,SqlQuery可能是合適的。

+0

我可以使用SqlQuery 來將表名之一替換爲另一個表或視圖名稱,該名稱與定義爲原始表的外鍵關係不具有相同的外鍵關係,並且不會導入到edmx中,但所有數據都是這樣的:所有查詢連接和字段都是更換後仍然有效? – alpav

+1

一切都必須在ObjectContext中註冊,但是您應該可以在沒有已知關係的字段上加入([JOIN FROM](http://msdn.microsoft.com/zh-cn/library/bb387167.aspx))在數據上下文中。 –

相關問題