[鐵人賽Day28] ASP.Net Core MVC 進化之路 - 工具篇(2) / LINQPad神器

本文將介紹LINQPad的基本使用情境。

LINQPad

「linqpad」的圖片搜尋結果(圖片來源:https://www.linqpad.net/)

 

LINQ(Language Integrate Query)為C#特有的一種整合式查詢語法,

內容大量使用委派(delegate)機制達到操作簡潔的效果。

可解決各資料來源查詢方式不一的問題,

關於LINQ的部份本篇不會介紹太多,

有需要的讀者請參考其他網路上的文件。

LINQPad是微軟釋出的免費工具,

提供使用LINQ查詢語法與資料庫互動的介面,

讓初學LINQ的人可以「還不熟C#就先學LINQ」。

 

講了落落長我們先到官網下載工具,

官方有提供免費版及付費版,

免費版本中必須什麼都自己Hand Code,

在付費版中有提供NuGetIntellisense等功能,

其餘功能差異如下表。

 

下載完畢後請執行安裝(略),

安裝完畢後請打開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的基礎使用就介紹到這邊,

不要再把這麼強的工具當練習品看待了!