本文將介紹LINQPad的基本使用情境。
LINQPad
(圖片來源:https://www.linqpad.net/)
LINQ(Language Integrate Query)為C#特有的一種整合式查詢語法,
內容大量使用委派(delegate)機制達到操作簡潔的效果。
可解決各資料來源查詢方式不一的問題,
關於LINQ的部份本篇不會介紹太多,
有需要的讀者請參考其他網路上的文件。
而LINQPad是由一位微軟 MVP 所開發的免費工具微軟釋出的免費工具,
提供使用LINQ查詢語法與資料庫互動的介面,
讓初學LINQ的人可以「還不熟C#就先學LINQ」。
講了落落長我們先到官網下載工具,
官方有提供免費版及付費版,
免費版本中必須什麼都自己Hand Code,
在付費版中有提供NuGet及Intellisense等功能,
其餘功能差異如下表。
下載完畢後請執行安裝(略),
安裝完畢後請打開LINQPad,
在開始之前請先準備一個練習用的資料庫,
筆者下面會使用localdb中的Northwind進行操作,
打開後請先點選左上方的[Add connection]。
開啟後點選上方的[Default(LINQ to SQL)],
接下來的頁面會請你設定資料庫的連接位置,
如果你有MDF資料檔也可以掛上去當作測試DB,
下方的選項會決定你的Table、Property命名的單複數,
也可載入資料庫的預存程序(Store Procedure),
填入相關資訊之後按[OK]繼續。
載入之後會看到跟資料庫很像的Table結構,
但其實它是幫你使用ORM生成裝載資料的類別(只是你看不到)。
點選Table右鍵有許多預設的方式可供使用,
基本上功能相當完整,
就跟使用SSMS(SQL Server Management Studio)一樣。
接著介紹右上方Language部分,
LINQPad支援C#、VB、F#三種語言及原生SQL語法,
筆者僅針對C#部分作介紹。
以下針對三種模式及使用情境作介紹。
C# Expression
僅能使用單行表達式,通常會在練習LINQ或查詢簡單條件資料的時候使用。
[情境] 查詢資料庫中生日(BirthDate)大於1960年1月1日的員工(Employees)資訊
這邊要特別介紹一個很好用的地方,
當你的資料表之間有建立關聯時,
它會幫你將有關聯到的資料包裝成超連結的形式,
透過點選超連結即可快速查看有關聯的資料,
光這點我就已經愛不釋手了!
執行結果如下圖。
點選後會展開對應的關聯資料。
C# Statement(s)
當查詢條件比較複雜時可以改用Statement(s)的陳述方式,
這邊可以允許輸入多行的程式碼進行運算,
但不能使用自訂類別及方法。
[情境]:查詢員工中FirstName為Michael者(簡單字串拆解)
這邊我們可以撰寫多行的程式碼,
筆者個人覺得對初學者練習上很有幫助!
除了資料觀看方便以外,
可以練習盲打的功力(是好處也是壞處XD),
而且不用建立一堆練習用的Console App!
但這邊要使用Dump()將想呈現的資料印出來,
有點類似Console.WriteLine()的概念。
這個功能看似平凡無奇,
但在部分老舊或開發中的系統,
針對「無法完善」或「尚未完善」的功能,
你可以直接使用LINQPad當作簡單的後台操作。
例如我可以針對考試系統的某個科目,
以某個公式調整所有的同學的成績,
諸如此類等等!
C# Program
雖然Statement的功能相當實用,
但我偶爾還是會用到Program的部分,
因為在這邊我可以自訂方法及類別,
在撰寫ViewModel的組合及資料處理會在Services層中進行,
當一段與資料互動的邏輯寫的不夠清楚時,
我會使用LINQPad幫助我從資料結果中發現錯誤,
基本操作如下圖。
以下示範將多張Table組成ViewModel的方式。
最後補充一下,
LINQ雖然是一種很方便的查詢語法,
但使用方式錯誤會導致系統速度嚴重被拖垮,
在LINQPad中可以觀察你所下的LINQ轉換成的SQL語法,
在查找效能瓶頸時很有幫助。
LINQPad的基礎使用就介紹到這邊,
不要再把這麼強的工具當練習品看待了!