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 +"'");
一定要注意單引號的問題;我之前就是把變量用雙引號括起來了,一直出錯,后來在網上查,發現要先有雙引號,再用單引號;即‘“變量”’;
/*在DataTable中選擇記錄*/ /* 向DataTable中插入記錄如上,更新和刪除如下:
* ----但是在更新和刪除前,首先要找出要更新和刪除的記錄。
* 一種方法是遍歷DataRow,搜索想要的記錄,
* --〉然而更聰明的辦法是使用DataTable.Select方法:table.Select();
* table.Select();//返回DataRow[],可以包含一行或多行,
* 取決於Select()的參數(filter)
* gets an array of all Data.DataRow objects that match the
* filter in the order of the sort
* that match the specified state
*/
DataRow[] arrRows = table.Select("title_id='JP1001'");
/*
* 下面這條語句選擇(返回)"Price"字段值小於10的DataRow
*/
DataRow[] arrRows = table.Select("price<10.00");
/*
* 下面這條語句選擇Pubdate字段日期在2000年1月1日當天或之后的DataRow
*/
DataRow[] arrRows = table.Select("pubdate>='#1/1/2000#'");
/*如果想知道Select返回了多少行,讀取數組的Length屬性*/
/*傳遞給DataTable.Select()的篩選器表達式:
* 下面比較操作符可以被支持:<,<=,=,>=,>和<>也可以使用IN和Like
*/
//返回"state"等於CA、TN或WA的所有行
DataRow[] arrRows = table.Select("state in('ca','tn','wa')");
//返回"state"以CA開頭的所有行
DataRow[] arrRows = table.Select("state like 'ca*'");
//還可以使用一些Sql函數,在DataTable中選擇State字段為空的記錄
DataRow[] arrRows = table.Select("isnull(state,0)=0");
//還可以使用And、Or和Not
DataRow[] arrRows = table.Select("state='tn' and zip like '37*'");
/*總之,可以用括號分組,創建復雜的布爾表達式*/