我有一个数据表,其中包含" CreateDate"和一个" UpdateDate"列。我试图找到最小的CreateDate和最大的UpdateDate。这并不难,但是列可以包含NULL(或DBNull),这让我感到沮丧。我使用以下内容:
DateTime dtMin = DateTime.MaxValue;
DateTime dtMax = DateTime.MinValue;
foreach(DataRow dr in dt.Rows)
{
DateTime dtCreateDate = dr.Field<DateTime>("CreateDate");
DateTime dtUpdateDate = dr.Field<DateTime>("UpdateDate");
dtMin = dtMin > dtCreateDate ? dtCreateDate : dtMin;
dtMax = dtMax > dtUpdateDate ? dtMax : dtUpdateDate;
}
直到我用NULL日期打到一行。
答案 0 :(得分:0)
在继续之前,首先检查数据行上的值是否为空:
foreach (DataRow dr in dt.Rows)
{
if (dr["CreateDate"] != null && dr["UpdateDate"] != null)
{
//TODO: Logic here
}
}
答案 1 :(得分:0)
在将值解析为DateTime之前,应检查DBNull.Value和null,因为DateTime datetype不能包含空值。 请记住,DBNull.Value和对象null是两个不同的东西
通过声明DateTime?,dtCreateDate,dtUpdateDate可以包含null值。然后,如果您收到空值,则可以跳过将其与dtMin和dtMax进行比较。
foreach (DataRow dr in dt.Rows)
{
DateTime? dtCreateDate = dr["CreateDate"] == DBNull.Value || dr["CreateDate"] == null ? (DateTime?) null : dr.Field<DateTime>("CreateDate");
DateTime? dtUpdateDate = dr["UpdateDate"] == DBNull.Value || dr["UpdateDate"] == null ? (DateTime?) null: dr.Field<DateTime>("UpdateDate");
dtMin = dtCreateDate == null ? dtMin : (dtMin > dtCreateDate ? dtCreateDate : dtMin);
dtMax = dtUpdateDate == null ? dtMax : (dtMax > dtUpdateDate ? dtMax : dtUpdateDate);
}
答案 2 :(得分:0)
你可以使用Min&amp;数据表支持的最大计算。其他选择是使用LINQ来查找min&amp;最大。如需参考,请参阅以下链接中的答案。 How to select min and max values of a column in a datatable?
答案 3 :(得分:0)
此地图可以帮助您
foreach (DataRow dr in dt.Rows)
{
DateTime? dtCreateDate = (DateTime?)dr["CreateDate"];
DateTime? dtUpdateDate = (DateTime?)dr["UpdateDate"];
dtMin = (dtCreateDate != null && dtMin > dtCreateDate) ? dtCreateDate.Value : dtMin;
dtMax = (dtUpdateDate != null && dtMax < dtUpdateDate) ? dtUpdateDate.Value : dtMax;
}
答案 4 :(得分:0)
这里使用合并运算符和条件运算符来管理条件:
foreach (DataRow dr in dt.Rows)
{
// Collecting data from DataRow
DateTime? dtCreateDate =dr.Field<DateTime?>("CreateDate")??(DateTime?)null;
DateTime? dtUpdateDate=dr.Field<DateTime?>("UpdateDate")??(DateTime?)null;
// Manupulating condition to get required result
dtMin = dtCreateDate != null ?(dtMin > dtCreateDate ? dtCreateDate : dtMin) : dtMin;
dtMax = dtUpdateDate != null ?(dtMax > dtUpdateDate ? dtMax : dtUpdateDate): dtMax;
}