在DataTable中执行DataTable.Select("条件")返回DataTable;

DataTable dtNew = new DataTable();
dtNew.Columns.Add("责任区", typeof(String));
dtNew.Columns.Add("工程编号", typeof(String));
dtNew.Columns.Add("建设单位", typeof(String));
dtNew.Columns.Add("项目名称", typeof(String));
dtNew.Columns.Add("开工日期", typeof(String));
dtNew.Columns.Add("建设节点", typeof(String));
dtNew.Columns.Add("存在问题", typeof(String));
dtNew.Columns.Add("整改情况", typeof(String));

if (counts > 0)//根据选择项导出
{
guids = guids.TrimEnd(',');
DataTable _dt = projectobj.GetXXXX(guids);
if (_dt.Rows.Count > 0)
{
DataRow drthree = dtNew.NewRow();
drthree[0] = "责任区";
drthree[1] = "工程编号";
drthree[2] = "建设单位";
drthree[3] = "项目名称";

drthree[4] = "开工日期";
drthree[5] = "建设节点";
drthree[6] = "存在问题";
drthree[7] = "整改情况";
dtNew.Rows.Add(drthree);

for (int i = 0; i < _dt.Rows.Count; i++)
{
DataRow dr = dtNew.NewRow();
dr[0] = _dt.Rows[i]["ssq"];
dr[1] = _dt.Rows[i]["gcbh"];
dr[2] = _dt.Rows[i]["jsdw"];
dr[3] = _dt.Rows[i]["gcmc"];

dr[4] = _dt.Rows[i]["ysrq"];
dr[5] = _dt.Rows[i]["gczt"];
dr[6] = _dt.Rows[i]["czwt"];
dr[7] = _dt.Rows[i]["zgqk"];

dtNew.Rows.Add(dr);
}

}

导出结构

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 +"'");

一定要注意单引号的问题;我之前就是把变量用双引号括起来了,一直出错,后来在网上查,发现要先有双引号,再用单引号;即‘“变量”’;

原文地址:https://www.cnblogs.com/sdya/p/4551180.html