使用 Linq Query 查询数据表 DBNull
本文关键字:数据表 DBNull 查询 Query Linq 使用 | 更新日期: 2023-09-27 18:32:39
我有一个数据集,其中包含一个名为 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();
我相信解决方案很简单,但直到现在我仍然没有看到它。
提前谢谢你。
此致敬意。。。
很难说你的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
。在比较时,某些时间值不太可能与当前时间的即时报价完全匹配。您可能应该在此处使用>=
或<=
运算符。或者只比较日期。