我剛開始學習LINQ to SQL,到目前爲止,我對易用性和良好性能印象深刻。關於LINQ to SQL基礎知識的問題
我曾經以爲,從數據庫時做LINQ查詢,如
from Customer in DB.Customers where Customer.Age > 30 select Customer
LINQ得到所有客戶(「SELECT * FROM客戶」),將其移至客戶數組,然後讓該搜索使用.NET方法的數組。這是非常低效的,如果數據庫中有成千上萬的客戶呢?做出如此大的SELECT查詢會終止Web應用程序。
現在遇到實際如何快速LINQ to SQL是後,我開始懷疑,這樣做查詢我剛寫的時候,LINQ莫名其妙地將其轉換爲SQL查詢字符串
SELECT * FROM Customers WHERE Age > 30
而且只在必要時它會運行查詢。
所以我的問題是:我是對嗎?什麼時候查詢實際運行?
我問的原因不僅僅是因爲我想了解它是如何工作以構建優化的應用程序,而是因爲我遇到了以下問題。
我有兩張桌子,其中一張是書籍,另一張有關於某些日子有多少書籍被出售的信息。我的目標是選擇過去10天內每天至少銷售50張的書籍。它與這個簡單的查詢做:
from Book in DB.Books where (from Sale in DB.Sales where Sale.SalesAmount >= 50 && Sale.DateOfSale >= DateTime.Now.AddDays(-10) select Sale.BookID).Contains(Book.ID) select Book
問題是,我有幾個查詢使用檢查的一部分,我決定建立一個與所有流行的書籍ID的數組:
var popularBooksIDs = from Sale in DB.Sales where Sale.SalesAmount >= 50 && Sale.DateOfSale >= DateTime.Now.AddDays(-10) select Sale.BookID;
BUT當我嘗試做現在的查詢時:
from Book in DB.Books where popularBooksIDs.Contains(Book.ID) select Book
它不起作用!這就是爲什麼我認爲我們不能在LINQ to SQL查詢中使用各種快捷方式,就像我們不能在真正的SQL中使用它們一樣。我們必須創建簡單的查詢,對嗎?
爲了適應速度,我強烈推薦LINQPad。這很難描述,但它基本上是LINQ查詢,你可以很容易地看到後臺發生了什麼。非常適合測試新的查詢。 http://www.linqpad.net/ – Steve 2010-03-23 21:09:56