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

C# 索引器進階應用(五):委派傳遞檢索策略實現靈活查詢

     編輯:關於C語言

前言

前文介紹索引器封裝固定檢索邏輯。本文展示如何透過委派(Func、Predicate)將檢索策略外部化,使索引器具備類 SQL WHERE 子句的靈活篩選能力。

核心概念:策略模式與索引器結合


public class DataRepository
{
    private List _items = new List();

    // 索引器接受委派,回傳符合條件的子集
    public IEnumerable this[Func predicate]
    {
        get => _items.Where(predicate);
    }

    // 多條件組合範例
    public IEnumerable this[Func p1, Func p2]
    {
        get => _items.Where(p1).Where(p2);
    }
}

// 使用範例
var repo = new DataRepository();
repo.Add(new Employee { Name = "Alice", Dept = "IT", Salary = 80000 });
repo.Add(new Employee { Name = "Bob", Dept = "HR", Salary = 60000 });

// 單一條件
var itStaff = repo[e => e.Dept == "IT"];

// 多條件鏈式
var highPaidIT = repo[e => e.Dept == "IT", e => e.Salary > 70000];

進階:動態建構查詢


public class DynamicQuery
{
    private List _data;
    public DynamicQuery(IEnumerable data) => _data = new List(data);

    public IEnumerable this[params Func[] predicates]
    {
        get
        {
            IEnumerable query = _data;
            foreach (var p in predicates)
                query = query.Where(p);
            return query;
        }
    }
}

// 靈活組合
var q = new DynamicQuery(products);
var result = q[p => p.Category == "Electronics", p => p.Price < 1000, p => p.InStock];

效能考量

  • 委派呼叫有微小開銷,熱路徑可考慮 Expression> 透過運算式樹優化。
  • 大量資料建議搭配 IQueryable、LINQ to SQL/EF 下推篩選至資料庫。

結語

委派賦予索引器「聲明式查詢」能力,讓資料存取層 API 更直觀、彈性。結合 LINQ、運算式樹,可構建強大的動態查詢引擎。

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