2014-10-02 36 views
0

我最近學習了一些LINQ源代碼,並決定在我正在開發的項目中使用它。除了一件事外,一切都幾乎清晰可辨。使用LINQ to SQL進行復雜查詢

我正在製作複雜的報表,由幾個表組成。之前我使用存儲過程來達到這個目的。我形成了臨時表中存儲的幾個臨時數據塊,然後使用一系列2表連接將它們連接在一起。

問題是: LINQ不允許創建臨時表。我知道在LINQ中以「級聯」的方式構建了複雜的查詢,但是如果我這樣做,

問題是:我最終會在DataContext.Log中收到什麼?我認爲這將是一個非常龐大的查詢,無法理解並用於調試。我對嗎?如果我是,如何找到解決方法? DataLoadOptions和LoadWith不會這樣做,因爲我一次處理所有數據,使用它將導致查詢雪崩。

在此先感謝

+0

你看過前例嗎? [Dapper](https://github.com/StackExchange/dapper-dot-net),那麼也許你可以將直接的SQL與LINQ結合起來? – Tomasito 2014-10-02 13:20:36

+0

我不想以任何方式處理SQL。這就是爲什麼我使用LINQ – Summit2 2014-10-03 09:29:42

回答

0

LINQ明確允許使用臨時表的創建,它只是實現的IQueryable(名單是一個很好的例子)的任何數據類型,因此,如果你需要一個臨時表,你只要做到這一點...

var tempTable1 = [LINQ Query goes here].ToList() 

和瞧,你有一個臨時表。如果你不喜歡泛型變量,那麼你可以創建類並使用List<tableClass>而不是泛型。

從這一點,您可以使用新的Var作爲某些東西在運行LINQ查詢時進行選擇。如果您需要更長的時間,可以將它存儲在Session中或傳遞變量。

+1

我在談論SQL臨時表。我假設將臨時結果放入內存中,然後在程序中進一步處理它們要比在SQL過程中用SQL臨時表執行同樣的事情要慢得多。要點是在存儲過程中,我可以看到每個單獨的查詢,並且我假設在Log中我不會有這種可能性。 – Summit2 2014-10-03 09:35:18

+0

是的,不幸的是,LINQ不支持SQL端臨時表。如果你的臨時表非常大,那麼當你開始填充本地內存時你會看到性能下降......但是對於一個較小的表,能夠避免與DB服務器交談導致的網絡滯後可以彌補針對C#對象的LINQ查詢性能略有下降。如果你肯定仍然需要臨時表,不幸的唯一方法就是將LINQ轉換爲臨時表:http://weblogs.asp.net/scottgu/linq-to-sql-part-6-retrieving-data-using-stored -procedures – guildsbounty 2014-10-03 12:43:08