今天看linq的时候看到了datatable的一个方法---AsEnumerable()跟着这个一起,我又把datatable的一些常用的东西自己总结了一下,防止以后忘了怎么用了
1)利用主键在datatable里面查找特定的数据项,方法为select返回值类型为datarow数组。(貌似以前我都是利用for循环在datagridview中查找,或者利用for循环在dataset里面查找,此方法需要注意的地方是需要“主键”如果是其他字段不好用。
DataSet ds = DbHelperSQL.Query("select * from tb_user");
DataRow[] dr = ds.Tables[0].Select.("uid>0");//此处应为主键即uid
foreach (DataRow d in dr)
{
for (int i = 0; i < d.ItemArray.Length; i++)//通过使用d.itemarray来获取数据行有几个数据列
{
Response.Write(d[i]);
}
Response.Write("<hr/>");
}
注:上面的也不一定就是主键,我么可以按照sql语句中的where中的条件去写也是一样的,如(uid>20 and name="wenbin")也可以。
2)连带着的,把dropdownlist的数据绑定也看了一下代码如下:(我以前是通过for循环来为dropdownlist一条一条的绑定数据,现在用下面的方法就方便多了)
DropDownList1.DataValueField = "uid";
DropDownList1.DataTextField = "name";
DropDownList1.DataSource = ds.Tables[0];
DropDownList1.DataBind();
指定特定的数据值字段、文本字段还有数据源就行了。
3)下面简单的讲解一下AsEnumerable()方法,这个方法我是在linq里面看到的,它主要用在对dataset进行查询的时候使用的,其实就是对datatable查询所使用的。
返回值类型为EnumerableRowCollection<DataRow>。
var query = from wenbin in ds.Tables[0].AsEnumerable() where wenbin.Field<int>("uid") > 0 select wenbin;//红色标注部分为字段udi的筛选条件
foreach (var a in query)
{
Response.Write("<div style='border:1px dotted red; width:200px; height:200px;'>" + a["pwd"] + "</div>");
//或者
Response.Write("<div style='border:1px dotted red; width:200px; height:200px;'>" + a.Field<string>("pwd") + "</div>");
}
上面的第一句的条件语句可以换成如下代码:
var query = ds.Tables[0].AsEnumerable().Where(wenbin => (wenbin.Field<string>("name").Trim() == "菲菲"));
这两句表达的是一个意思,只不过一个是完整的linq语句,一个是简化了的lambda表达式。
然后还有下面的一些方法,我从网上搜到的,大家也可以看看
DataTable dt = GetDetails().Tables[0]; //获取可用的DataTable
// var m = dt.AsEnumerable().Last<DataRow>(); 返回DataTable最后一行DataRow
//var m = dt.AsEnumerable().First<DataRow>(); 返回DataTable第一行DataRow
//var m = dt.AsEnumerable().Count<DataRow>();返回DataTable总行数
//var m = dt.AsEnumerable().ElementAt<DataRow>(TipIndex); 返回DataTable 第TipIndex条的DataRow
//var m = dt.AsEnumerable().Reverse<DataRow>(); 对DataTable反向排序
//var m = dt.AsEnumerable().Skip<DataRow>(TipIndex); 跳过DataTable前TipIndex条
var m = dt.AsEnumerable().Take<DataRow>(TipIndex); //提取DataTable前TipIndex条
DataTable T = m.CopyToDataTable<DataRow>();
其中最后一个未注释的是经常用到的,可以用来提取前N行,类似于SQL中的Top N。
上面黄色的代码转自:http://hi.baidu.com/jiang_yy_jiang/item/cf375c90a69b351b924f41a3
其实上面转的部分带我我个人不提倡使用,比较麻烦如//var m = dt.AsEnumerable().First<DataRow>(); 返回DataTable第一行DataRow 这一句,我们完全可以使用
dt.rows[0]来实现。而且效率上我觉得dt.rows[0]的效率能高一些,毕竟的代码里面还有转换。不过使用上还是看个人喜好........