c# linq如何检查空值在同一列,我需要不为空
本文关键字:一列 何检查 linq 检查 空值 | 更新日期: 2023-09-27 18:01:28
我在linq中有这个查询
var finalResults = (from r in results.AsEnumerable()
where DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
有时SentOn
列可能为空,我想忽略这些情况。如何删除这些空情况?
如果需要,我们可以做一个暂存(另一个)表,它只有非空值,我可以继续
表是results
那么我能不能有另一个表,比如results2
没有空值或者SentOn
呢?
如果字段SentOn
可以是null
,则必须返回DateTime?
而不是DateTime
。
试题:
var finalResults = (from r in results.AsEnumerable()
where r.Field<DateTime?>("SentOn") != null &&
DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
或者,正如评论中指出的,您可以使用DataRow.IsNull
。
var finalResults = (from r in results.AsEnumerable()
where !r.IsNull("SentOn") &&
DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
需要先使用IsNull
方法检查该值是否为空。可以这样做:
var finalResults = (from r in results.AsEnumerable()
where !r.IsNull("SentOn") &&
DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
只需在WHERE
子句中添加测试:
var finalResults = (from r in results.AsEnumerable()
where !r.IsNull("SentOn")
&& DateTime.Now.Subtract(
r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
你可以在你的。where方法中使用'if'语句进行检查:
var finalResults = results.AsEnumerable().Where(r =>
{
if(r.Field<DateTime?>("SentOn") == null) return false;
return DateTime.Now.Subtract(r.Field<DateTime?>("SentOn")).Minutes > 7;
}).ToList();
试试这个
dt.AsEnumerable().Where(r => r.Field<DateTime?>("SentOn") != null && DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7);
一个空检查就足够了。
var finalResults = results.AsEnumerable().Select(r => !r.IsNull(("SentOn"))
&& DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7)
如果这是一个重复的模式,您可以创建一个扩展方法。