首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

LINQ to SQL 進階技巧(17):動態查詢與運算式樹手動建構完整解析

     編輯:關於ASP.NET

當查詢條件在編譯時期無法確定(如使用者動態勾選篩選條件),需透過運算式樹在執行期動態建構 LINQ 查詢。

核心概念

  • IQueryable<T> 查詢編譯為運算式樹,由 Provider 轉譯為 SQL
  • Expression<TDelegate> 代表強型別運算式樹
  • System.Linq.Expressions 命名空間提供手動建構 API

動態 Select 範例:手動建構 c => c.ContactName

// 1. 參數運算式:Customer c
ParameterExpression param = Expression.Parameter(typeof(Customer), "c");

// 2. 屬性存取:c.ContactName
Expression selector = Expression.Property(param, typeof(Customer).GetProperty("ContactName"));

// 3. Lambda:c => c.ContactName
Expression pred = Expression.Lambda(selector, param);

// 4. 呼叫 Queryable.Select:Select(c => c.ContactName)
Expression expr = Expression.Call(
    typeof(Queryable), "Select",
    new Type[] { typeof(Customer), typeof(string) },
    Expression.Constant(custs), pred);

// 5. 建立動態查詢並取得 SQL
IQueryable<string> query = db.Customers.AsQueryable().Provider.CreateQuery<string>(expr);
DbCommand cmd = db.GetCommand(query);
Console.WriteLine(cmd.CommandText);
// 輸出:SELECT [t0].[ContactName] FROM [dbo].[Customers] AS [t0]

適用場景

  • 使用者自訂報表欄位
  • 動態篩選條件組合
  • 通用查詢建構器

雖程式碼較冗長,但提供極大彈性,是進階 LINQ 開發必備技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved