搜索行时,计数返回0

时间:2014-06-30 22:26:59

标签: c# datatable

我目前正在执行以下操作,尝试根据日期时间返回数据表中的特定行。我遇到的问题是当我运行代码时,我的行数连续得到0,我不确定为什么。这里有一些代码可能有人可以分开。

var myDay = new AnalysisDay(uniqueDate.Date, null, null, null, null);

var daysList = new List<AnalysisDay>();
foreach(var uniqueDate in uniqueDateList)
{
   var myDay = new AnalysisDay(uniqueDate.Date, null, null, null, null);

   var curDate = uniqueDate;

   //This is the area where the rows come back 0 everytime "Start Date Time"
   //occasionally has DBNull values
   var curDatesRows = analysisInfo.Tables[0].Select("StartDateTime = #{0}#", curDate.ToShortDateString()));
}

这是整个引用的自定义类

public class AnalysisDay
{
 public  DateTime? Date { get; set; }
 public DateTime? Time { get; set; }
 public string Name { get; set; }
 public  int? CarNumber { get; set; }
 public  int? RunId { get; set; }
 public ObservableCollection<AnalysisDay> Items { get; set; }

 public AnalysisDay(DateTime? date, DateTime? time, string strName, int? number, int? runId)
 {
   Date = date;
   Time = time;
   Name = strName;
   CarNumber = carNum;
   RunId = runId;
   Items = new ObservableCollection<AnalysisDay>();
 }
}

如果我遗漏了任何内容或需要提供更多信息,请告知我们,我会尽快更新。

2 个答案:

答案 0 :(得分:1)

关于比较的一些事情必定是失败的。我通常使用LINQ来查询:

var curDatesRows
    = dt.Rows.Cast<DataRow>()
        .Where(x => x.Field<DateTime?>("StartDateTime").HasValue
                    && x.Field<DateTime>("StartDateTime").Date == curDate.Date);

我在一些示例数据上对此进行了测试 - 它将过滤掉具有空值的行。

请注意,如果curDate有时间部分,并且它与表格中的内容完全不匹配,那么除非您使用{{1},否则您将无法获得任何行在进行比较时删除时间部分。

答案 1 :(得分:0)

看起来您正在传递一个短日期字符串作为针对包含日期时间值(包括时间组件)的列的过滤器。我相信startDateTime列中的任何日期都不会与过滤器匹配,或者只有时间组件全部为零的值(这是不太可能的,除非您在持久化之前修改时间。

没有其他信息,很难说清楚。你能告诉我们表中的一些样本数据吗?具体来说,startDateTime列?