1. 程式人生 > >在DataTable中執行DataTable.Select("條件"),

在DataTable中執行DataTable.Select("條件"),

1.在DataTable中執行DataTable.Select("條件")返回DataTable;

// <summary>
// 執行DataTable中的查詢返回新的DataTable
// </summary>
// dt 是源資料DataTable
// condition 是查詢條件

DataTable newdt = new DataTable();
newdt = dt.Clone(); // 克隆dt 的結構,包括所有 dt 架構和約束,並無資料;
DataRow[] rows = dt.Select(conditions); // 從dt 中查詢符合條件的記錄;
foreach (DataRow row in rows)  // 將查詢的結果新增到dt中;
{
       newdt.Rows.Add(row.ItemArray);
}

有網友說也可以這樣:(大家可以試試)

DataTable newdt = new DataTable();
newdt=dt.Clone();
DataRow[] dr = dt.Select(condition);
for(int i=0;i<dr.Length;i++)
{
newdt.ImportRow((DataRow)dr[i]);
}

2.關於DataTable.Select();

Select方法:  
  Select();//全部查出來  
  Select(過濾條件);//根據過濾條件進行過濾,如Select("columnname1   like   '%xx%'");  
  Select(過濾條件,排序欄位);//過濾,並排序,如Select("columnname1   like   '%xx%'",columnname2);

完成一個查詢,返回一個DataTable後,很多時候都想在查詢結果中繼續搜尋。這時可以使用DataTable.Select方法對結果進行再查詢。
Select方法有4個過載,我們經常用到的就是DataTable.Select(String) ;

下面就說說帶一個引數的DataTable.Select(String):
這個String的引數是查詢的限定式。相當於SQL查詢語言中的WHERE語句(不含WHERE),其語法符合SQL語言語法。 (網友的說法)我覺得就是類似sql的語法而已。

不過我試了試,不支援BETWEEN AND,舉個成功的例子:

//FromTime 和ToTime 是兩個DateTime型別的變數;occurTime是dTable裡面的列名;

DataRow[] datarows = dTable.Select("occurTime >= '" + FromTime + "' and occurTime <= '" + ToTime+"'");

DataTable.Select()方法裡面支援簡單的過濾和排序,不支援複雜的條件過濾和排序。裡面的字串必須是列名和資料,以及>,<,=,<>等關係運算符。舉幾個例子:

DataRow[]   row   =   Detailtb.Select("WZMC='"+MaterialName+"' and   CZ='"+MaterialTexture+"   and   GG='"+MaterialSpecs+"'");   

DataTable.Select("City Like 'B%'");

DataTable.Select("name='" + a +"'");

一定要注意單引號的問題;我之前就是把變數用雙引號括起來了,一直出錯,後來在網上查,發現要先有雙引號,再用單引號;即‘“變數”’;