LINQ查詢操作全面分析
學習LINQ查詢時,經常會遇到LINQ查詢操作問題,這里將介紹LINQ查詢操作問題的解決方法。
語言集成查詢 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中一項突破性的創(chuàng)新,它在對象領域和數(shù)據領域之間架起了一座橋梁。
傳統(tǒng)上,針對數(shù)據的查詢都是以簡單的字符串表示,而沒有編譯時類型檢查或 IntelliSense 支持。此外,您還必須針對以下各種數(shù)據源學習不同的查詢語言:SQL 數(shù)據庫、XML 文檔、各種 Web 服務等。LINQ 使查詢成為 C# 和 Visual Basic 中的一等語言構造。您可以使用語言關鍵字和熟悉的運算符針對強類型化對象集合編寫查詢。用 C# 語言編寫的、不完整的 LINQ 查詢,該查詢針對 SQL Server 數(shù)據庫,并具有完全類型檢查和 IntelliSense 支持。
LINQ查詢操作由以下三個操作組成:
1、獲取數(shù)據源:支持泛型 IEnumerable(Of (T)) 接口的所有對象都可以作為LINQ的數(shù)據源,包括Array、List等。
2、創(chuàng)建查詢:指定要從數(shù)據源中檢索的哪些信息,還可以指定在返回這些信息之前如何對其進行排序、分組或結構化。創(chuàng)建(定義)的查詢通常存儲在變量中,并不會在定義時馬上執(zhí)行而是在以后執(zhí)行。所以記住:查詢變量本身不會執(zhí)行任何操作,也不會返回任何數(shù)據,它只是存儲查詢定義。
3、執(zhí)行查詢:執(zhí)行查詢有兩種情況,1是延遲執(zhí)行;2是立即執(zhí)行。
3.1、延遲執(zhí)行:查詢定義并保存在查詢定義變量后,不馬上執(zhí)行,而是在后續(xù)需要時才執(zhí)行。這通常需要使用 For Each 循環(huán)(它返回值序列)或應用標準查詢運算符。對于值序列,可使用 For Each 循環(huán)中的迭代變量(在上一個示例中為 number)訪問所檢索的數(shù)據。
3.2、立即執(zhí)行:在立即執(zhí)行過程中,查詢在定義時執(zhí)行。當應用需要訪問查詢結果的各個元素的方法時,就會觸發(fā)執(zhí)行。通常使用能夠返回單個值的標準查詢運算符之一來強制立即執(zhí)行。Count、Max、Average 和 First 就屬于標準查詢運算符。只要應用了這些標準查詢運算符以便計算并返回單一實例結果,這些運算符就會立即執(zhí)行查詢。例如:
- Dim numbers中的偶數(shù)個數(shù) = (From num In numbers _
- Where num Mod 2 = 0 _
- Select num).Count()
還可通過對查詢(立即執(zhí)行)或查詢變量(延遲執(zhí)行)調用 ToList 或 ToArray 方法來強制執(zhí)行查詢,如下面的代碼所示:
- Dim evensList = (From num In numbers _
- Where num Mod 2 = 0 _
- Select num).ToList()
以上介紹LINQ查詢操作
【編輯推薦】