將 LINQ 查詢轉換為 SQL 查詢

IQueryableIQueryable<T> 介面允許開發人員將 LINQ 查詢(語言整合查詢)轉換為特定資料來源,例如關聯式資料庫。拿這個用 C#編寫的 LINQ 查詢:

var query = from book in books
            where book.Author == "Stephen King" 
            select book;

如果變數 books 是實現 IQueryable<Book> 的型別,那麼上面的查詢將以表示式樹的形式傳遞給提供者(在 IQueryable.Provider 屬性上設定),表示式樹是反映程式碼結構的資料結構。

提供程式可以在執行時檢查表示式樹以確定:

  • Book 類的 Author 屬性有一個謂詞;
  • 使用的比較方法是’等於’(==);
  • 它應該相等的價值是 Stephen King

有了這些資訊,提供程式可以在執行時將 C#查詢轉換為 SQL 查詢,並將該查詢傳遞給關聯式資料庫,以僅獲取與謂詞匹配的書籍:

select *
from Books
where Author = 'Stephen King'

query 變數被迭代時,提供者被呼叫(IQueryable 實現 IEnumerable)。

(此示例中使用的提供程式需要一些額外的後設資料才能知道要查詢的表以及如何將 C#類的屬性與表的列匹配,但此類後設資料超出了 IQueryable 介面的範圍。)