我目前正在执行以下操作,尝试根据日期时间返回数据表中的特定行。我遇到的问题是当我运行代码时,我的行数连续得到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>();
}
}
如果我遗漏了任何内容或需要提供更多信息,请告知我们,我会尽快更新。
答案 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
列?