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

C# DataView RowFilter 完全攻略:離線資料查詢無需 SQL

     編輯:關於C#

為什麼需要 DataView?

當 DataTable 資料尚未寫入資料庫、或已在本地修改未回寫時,無法使用 SQL 查詢。DataView 的 RowFilter 屬性提供類 SQL 的篩選語法,直接在記憶體中完成查詢、排序、編輯。

快速上手範例

步驟 1:建立測試 DataTable

private DataTable MakeTable()
{
    var dt = new DataTable("Products");
    dt.Columns.Add("ID", typeof(int));
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));

    dt.Rows.Add(1, "足球", 57.5m);
    dt.Rows.Add(2, "籃球", 64.5m);
    dt.Rows.Add(3, "網球", 6.5m);
    dt.Rows.Add(4, "網球拍", 388.5m);
    return dt;
}

步驟 2:繫結到 DataGrid

DataTable dt = MakeTable();
Session["Table"] = dt;
DataGrid1.DataSource = dt;
DataGrid1.DataBind();

步驟 3:模糊查詢(LIKE)

DataView dv = new DataView((DataTable)Session["Table"]);
dv.RowFilter = "Name LIKE '%" + TextBox1.Text.Trim() + "%'";
DataGrid1.DataSource = dv;
DataGrid1.DataBind();

輸入「網」→ 顯示「網球」、「網球拍」。

步驟 4:區間查詢(AND、比較運算子)

dv.RowFilter = "Price >= " + TextBox2.Text.Trim() + 
               " AND Price <= " + TextBox3.Text.Trim();

輸入 10 ~ 70 → 顯示「足球 57.5」、「籃球 64.5」。

RowFilter 語法速查表

類別運算子/函數範例
比較=, <>, <, >, <=, >=Price <= 50
INCategory IN (1,2,3)
LIKEName LIKE '%球%'
IS NULLRemark IS NULL
算術+, -, *, /, %Price * 1.05
字串串接+FirstName + ' ' + LastName
邏輯AND, OR, NOT(A=1 OR A=2) AND B>5
括號優先序(...)
通配元* 或 %(開頭/結尾)LIKE 'abc*'、LIKE '*abc'
聚合(需關聯)Sum, Avg, Min, Max, Count, StDev, VarSum(Child.Price)
父表參考Parent.ColumnNameParent.CategoryName
子表參考Child(關聯名).ColumnNameAvg(Child(Orders2Details).Qty)
單表聚合Agg(ColumnName)Sum(Price)

資料型別常值格式

  • 字串:'John'(單引號)
  • 日期:#1/31/2024#(井號)
  • 數值:50.00、1.2E3
  • 列舉:EnumColumn = 5(轉整數)

注意事項

  1. RowFilter 不支援子查詢、JOIN、存儲程序等進階 SQL 功能。
  2. 大小寫敏感度由 DataSet.CaseSensitive 或 DataTable.CaseSensitive 控制。
  3. 效能:大量資料(>10 萬筆)建議改用 DataTable.Select 或 LINQ to DataSet。

結語

DataView.RowFilter 是離線資料操作的利器,語法直覺、效能足夠中小型資料集,掌握它能大幅減少資料庫往返。

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