2015-02-04 35 views
3

好的,這是一個愚蠢的問題。SQL視圖的LINQ版本?

據我所知,SQL視圖是一個基於SQL查詢的結果集的虛擬表。

從我對SQL視圖的有限瞭解,我假設我從LINQ語句獲得的結果集與SQL視圖是一樣的。

我誤解了嗎?

我問的原因是我有一個程序使用foreach循環從LINQ查詢逐行讀取結果集。一位同事說我應該使用預先構建的SQL視圖來加速程序。不熟悉SQL視圖,根據我有限的知識,我不確定它會如何幫助我。

+0

在代碼中,它們在功能上是相同的。 SQL視圖可能會更快,這取決於您的使用情況 – DLeh

+1

也許這就是爲什麼我的同事提到使用SQL視圖。我正在逐行檢查每條記錄的'foreach'中的某些標準。也許他的意思是我可以用一個視圖來削減結果集,從而丟棄不符合我的標準的記錄。但是,我可以在LINQ語句的原始結果集上做到這一點。我可以減少結果,剔除我不需要的記錄,然後重複其餘結果。謝謝! – Kevin

+1

是的,如果你在最初的LINQ語句中應用了一個有用的Where和'Select new',你將基本上做同樣的事情,就像你在創建一個SQL視圖一樣。大多數情況下,SQL應該能夠運行任意查詢(來自LINQ),並且與SQL視圖的性能非常相似,但是會出現SQL視圖將得到更好優化的情況。 – DLeh

回答

2

您可能會將SQL視圖看作結果集,它可能會合並多個表的值(通過連接,使用子選擇等)。如果您查詢SQL視圖,您會獲得更好的性能。

Linq 2 SQL返回您的數據集並執行映射到一個對象,所以你得到IList。

Linq適用於所謂的IQueryable接口。好處是,當您在IQueryable表達式上點擊iq.List(),iq.Array()方法時,IQueryable被執行。

我實際使用它在我的項目之一,在一種特殊的方式: - 創建所需的IQueryable查詢 - 再視我執行iq.Count()或iq.List(用例)上它。因爲我可以避免calint iq.List()(因爲我主要只需要知道計數),我得到了性能。增加 - 而且我不必修改現有的代碼。

+0

感謝您的解釋!定時器啓動後,我會立即給出答案。 – Kevin