我有一个DataSet,其中包含一个名为Vacs的数据表,它有一个名为VacDate的日期列,在某些情况下它保存空值。
现在,当我尝试使用linq查询进行查询时,我得到了以下异常
表\'Vacs \'中列''VacDate \'的值是DBNull
我的代码是:
var Vacs = new MyDataSetTableAdapter.MyVacsTableAdapter();
DataTable Vacations = Vacs.GetData()
.Where(s => s.VacDate == DateTime.Now)
.ToList()
.CopyToDataTable();
我确实尝试了以下但仍然遇到同样的错误
DataTable Vacations = Vacs.GetData()
.Where(s => s.VacDate != null && s.VacDate == DateTime.Now)
.ToList()
.CopyToDataTable();
我相信解决方案很简单,但直到现在我仍然没有看到它。
提前谢谢。
最好的问候......
答案 0 :(得分:1)
很难说出MyVacsTableAdapter
课程的实施情况。似乎问题就在于它的实现 - 当你获得VacDate
属性值时,你没有处理DbNull情况。无论如何 - 使用LINQ to DataSet进行此类过滤很容易。如果Vacs
很简单DataTable
,则只创建符合某些条件的行的新DataTable,如下所示:
DataTable allVacations = new DataTable(); // get filled DataTable
DataTable nextVacations = allVacations.AsEnumerable()
.Where(r => r.Field<DateTime?>("VacDate") >= DateTime.Today)
.CopyToDataTable();
LINQ可以处理DbNull情况并将单元格值转换为适当的数据类型。
注意:您在条件检查中使用DateTime.Now
。在比较时,某个时间值不太可能与当前时间的滴答完全匹配。您应该在这里使用>=
或<=
运算符。或比较日期。