首页 新闻 搜索 专区 学院

datatable.select()怎么不会用?

0
悬赏园豆:20 [已解决问题] 解决于 2012-12-27 15:45

有一个读取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表的开始时间和结束时间之内的

W宁宁的主页 W宁宁 | 小虾三级 | 园豆:522
提问于:2012-12-27 14:33
< >
分享
最佳答案
0

table.Select("Date > '1/1/00'");

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2012-12-27 14:43

没有懂,'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宁宁 | 园豆:522 (小虾三级) | 2012-12-27 14:53

@W宁宁: 我估计是你的数据类型不正确:http://msdn.microsoft.com/zh-cn/library/way3dy9w(v=VS.80).aspx

注意这篇例子中,DataSet1.Tables["Orders"] 表的 Date 列是 DataTime 的数据类型。

Launcher | 园豆:45045 (高人七级) | 2012-12-27 14:56
其他回答(3)
0

DataRow[] dr = table.Select(“arrangetime>08:00:00 and arrangetime<10:00:00”);

卒子 | 园豆:588 (小虾三级) | 2012-12-27 14:43

arrangetime是表啊

支持(0) 反对(0) W宁宁 | 园豆:522 (小虾三级) | 2012-12-27 14:50

@W宁宁: 那就改改列名啊,如果出错就用单引号引起来

DataRow[] dr = table.Select(“time>‘08:00:00’ and time<‘10:00:00’”);

支持(0) 反对(0) 卒子 | 园豆:588 (小虾三级) | 2012-12-27 15:12

@卒子: “time>08:00:00”   这里的08:00:00可以是变量么starttime么?? 放在‘’里似乎报错啊 所有比较的时间都不可以是死的 

支持(0) 反对(0) W宁宁 | 园豆:522 (小虾三级) | 2012-12-27 15:31
0

使用linq比较简单。

DataTable.AsEnumerable()

.where(w=>w.Field<Datetime?>("arrangetime")>08:00  and w.Field<Datetime?>("arrangetime")<10:00)

.select(d=>d);

 

daone | 园豆:273 (菜鸟二级) | 2012-12-27 15:05
0

试试用一下linq表达式

DataTable.AsEnumerable()

.where(t=>t.Field<Datetime?>("arrangetime")>08:00  and t.Field<Datetime?>("arrangetime")<09:00)

.select(d=>d);

妍珊 | 园豆:1169 (小虾三级) | 2012-12-27 15:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册