有一个读取txt文件制成的表:
DataTable table = new DataTable(); conten = sr.ReadLine(); //sb.AppendLine(conten); // 把数据以指标符\t分割 string[] values = conten.Split('\t'); row = table.NewRow(); row["id"] = values[0]; row["time"] = values[1]; row["name"] = values[4]; row["IO"] = values[5]; table.Rows.Add(row);
如:
20 2012-11-28 07:32:45 陈婷婷 上班
21 2012-11-28 07:32:53 张妍 上班
10 2012-11-28 11:31:43 杜立欣 上班
20 2012-11-28 11:33:09 陈婷婷 下班
21 2012-11-28 11:33:36 张妍 下班
19 2012-11-28 11:34:28 冯小雨 下班
17 2012-11-28 11:48:12 邢亚杰 下班
有数据库里查出来的DataTable表arrangetime:
DataTable arrangetime = tool.GetArrangeTimeDate(date1, date2); //省略部分代码 for (int i = 0; i < arrangetime.Rows.Count; i++) { SqlStringBuilder strb = new SqlStringBuilder(); string name = arrangetime.Rows[i][0].ToString(); int cards = Convert.ToInt32(arrangetime.Rows[i][1]); DateTime dt = Convert.ToDateTime(arrangetime.Rows[i][2]);//排班时间表的开始上班时间 TimeSpan midTime = TimeSpan.Parse("00:10"); TimeSpan timespanM = TimeSpan.Parse("-01:00"); TimeSpan timespanA = TimeSpan.Parse("01:00"); DateTime starttime = dt.Add(midTime); //开始时间加上十分钟 DateTime endtime = Convert.ToDateTime(arrangetime.Rows[i][3]); DateTime date = Convert.ToDateTime(arrangetime.Rows[i][4]); }
如:
name1 2 08:00:00 08:00:00 2012-11-26
name2 2 08:00:00 15:00:00 2012-11-26
name3 2 08:00:00 16:00:00 2012-11-26
name4 4 08:00:00 16:30:00 2012-11-26
name5 2 08:00:00 15:00:00 2012-11-26
name6 4 08:00:00 16:30:00 2012-11-26
name7 2 23:59:59 08:00:00 2012-11-26
name8 2 23:59:59 08:00:00 2012-11-26
name9 2 16:00:00 23:59:59 2012-11-26
怎么用DataRow[] dr = table.Select();来查询table表中的打卡时间在arrangetime表的开始时间和结束时间之内的
table.Select("Date > '1/1/00'");
没有懂,'1/1/00'是?我用过这些式 都不对
StringBuilder stringb = new StringBuilder("datetime1 between ");
stringb.Append(dt.Add(timespanM)).Append(" and ").Append(dt.Add(timespanA)).Append(" and name=").Append(name);
StringBuilder sss = new StringBuilder("name=").Append(name);
string compare = (Datet > endtime).ToString();
DataRow[] dr = table.Select(compare);
DataRow[] dr = table.Select("time >" + endtime + " and name=" + name);//条件Convert.ToDateTime(str)>endtime
DataRow[] dr = table.Select(stringb.ToString());//stringb.ToString()
DataRow[] dr = table.Select(string.Format("{0}={1}", name, table.Rows[j][2]));
DataRow[] dr = table.Select(sss.ToString());
@W宁宁: 我估计是你的数据类型不正确:http://msdn.microsoft.com/zh-cn/library/way3dy9w(v=VS.80).aspx
注意这篇例子中,DataSet1.Tables["Orders"] 表的 Date 列是 DataTime 的数据类型。
DataRow[] dr = table.Select(“arrangetime>08:00:00 and arrangetime<10:00:00”);
arrangetime是表啊
@W宁宁: 那就改改列名啊,如果出错就用单引号引起来
DataRow[] dr = table.Select(“time>‘08:00:00’ and time<‘10:00:00’”);
@卒子: “time>08:00:00” 这里的08:00:00可以是变量么starttime么?? 放在‘’里似乎报错啊 所有比较的时间都不可以是死的
使用linq比较简单。
DataTable.AsEnumerable()
.where(w=>w.Field<Datetime?>("arrangetime")>08:00 and w.Field<Datetime?>("arrangetime")<10:00)
.select(d=>d);
试试用一下linq表达式
DataTable.AsEnumerable()
.where(t=>t.Field<Datetime?>("arrangetime")>08:00 and t.Field<Datetime?>("arrangetime")<09:00)
.select(d=>d);