技術交流

使用 LINQ 優化程式效能

陳英維 陳英維
Tags:LINQSQL.NET資料轉型資料篩選資料分頁資料加總資料排序

LINQ 隨 .NET Framework 3.5 發布並加入 Visual Studio,以「可以在程式裡寫 SQL 語法查資料」為其特點,故寫法可分成兩種,一種是用 LINQ 查詢運算式(LINQ Query Expression,寫法有點像 SQL 語法),另一種則是用 LINQ 中的函數加上 Lambda 運算式。

LINQ 的兩種寫法

在經歷開發多個 ASP .NET MVC 專案之後,發現若無要求使用 LINQ 寫法的話,該專案的 LINQ 使用率就會較低。其實適當使用 LINQ 寫法會更有效率,並不會降低程式可讀性,程式碼也不會太過冗長。

LINEQ 常用的五個面向

  • 資料轉型方面

    ASP .NET MVC 專案所使用的資料類型大多使用強型別(例如:自定義的資料模型),不再像以往使用弱型別(例如:DataTable),所以於資料庫取出的資料會由弱型別轉成強型別,有些開發者習慣使用 for、foreach 來進行資料轉型,其作法當取出大量資料時會比較耗時,若是轉為 LINQ 寫法則不會降低程式的可讀性,並可降低執行時間。

    資料轉型 foreach 寫法
    資料轉型 LINQ 寫法
  • 資料篩選方面

    一般寫法大都是用 for、foreach、while 配合 if else 判斷來撰寫;LINQ 寫法(Where、All、Any)相較之下程式碼較為簡短,並不會降低程式的可讀性。

    資料篩選 foreach 寫法
    資料篩選 LINQ 寫法
  • 資料分頁或是取部分資料方面

    一般寫法大都是用 for 來撰寫;LINQ 寫法(Skip、Take)相較之下程式碼較為簡短,並不會降低程式的可讀性,也可以用 Where 配合來進行相關撰寫。

    資料分頁 for 寫法
    資料分頁 LINQ 寫法
  • 資料計數或加總方面

    一般寫法大都是用 for、foreach、while 配合 if else 判斷來撰寫;LINQ 寫法(Count、Sum)相較之下程式碼較為簡短,並不會降低程式的可讀性,也可以用 Where 配合來進行相關撰寫。

    資料計數 foreach 寫法
    資料計數 LINQ 寫法
  • 資料排序方面

    一般寫法大都是在轉換型別前,用 DataTable 的相關排序方式或是用 for 方式來進行排序;LINQ 寫法(OrderBy、OrderByDescending、ThenBy、ThenByDescending)相較之下程式碼較為簡短,並不會降低程式的可讀性。

    資料排序 LINQ 寫法 - 單一排序
    資料排序 LINQ 寫法 - 多重排序