通过DateTime列从DataTable中选择行(小时)

时间:2010-03-12 10:33:18

标签: c# .net

DatarowsForOneDay = dt.Select(
    dt.Columns[0].Caption + "='" + x.ToString("dd/MM/yyyy HH") + "'");

不起作用,但

DatarowsForOneDay = dt.Select(
    dt.Columns[0].Caption + "='" + x.ToString("dd/MM/yyyy") + "'");

的工作原理。

那么如何选择同一小时的日期呢?

变量x类型为DateTime

4 个答案:

答案 0 :(得分:2)

.Select方法接受一个过滤表达式,其语法与DataColum.Expression中使用的过滤表达式相同。您可以查看MSDN条目以获取详细信息:

DataColumn.Expression Property

如果LINQ可用,您可以执行以下操作:

DataTable dt = new DataTable();

dt.Columns.Add("DT", typeof(DateTime));

foreach (var item in Enumerable.Range(1, 20))
{
    dt.Rows.Add(new DateTime(2010, 3, 10, item, 20, 10));
}

DataRow[] rows = dt.Rows.Cast<DataRow>().Where(dr => 
    ((DateTime)dr["DT"]).ToString("yyyy-MM-dd HH") == "2010-03-10 10")
    .ToArray();

Console.WriteLine(rows.Length);

答案 1 :(得分:2)

您可以使用此代码。迭代DataTable中的所有行,并根据相同的日期和小时添加到searchRecords列表中。

List<DataRow> searchRecords = new List<DataRow>();
string searchDateOnHour = DateTime.Now.ToString("dd/MM/yyyy HH");
foreach (DataRow item in table.Rows)
{
    DateTime recordDate;
    DateTime.TryParse(item["comDate"].ToString(), out recordDate);
    string recordDateHour = recordDate.ToString("dd/MM/yyyy HH");        
    if (searchDateOnHour == recordDateHour)
        searchRecords.Add(item);            
}

答案 2 :(得分:1)

答案 3 :(得分:1)

使用SUBSTRING or LIKE

dt.Columns[0].Caption + " LIKE '" + x.ToString("dd/MM/yyyy HH") + "*'"