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);
}
isnull的用法有⽹友说也可以这样:(⼤家可以试试)
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*'");
/*总之,可以⽤括号分组,创建复杂的布尔表达式*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。