我在linq中有这个查询
var finalResults = (from r in results.AsEnumerable()
where DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
有时SentOn
列可能为null,我想忽略这些情况。如何删除这些空案例?
如果需要,我们可以做一个只有非空值的暂存(另一个)表,我可以继续
该表格为results
所以我可以使用另一个表格,让我们说results2
没有空值或SentOn
吗?
答案 0 :(得分:2)
如果字段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();
答案 1 :(得分:1)
只需在WHERE
子句中添加测试:
var finalResults = (from r in results.AsEnumerable()
where !r.IsNull("SentOn")
&& DateTime.Now.Subtract(
r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
答案 2 :(得分:1)
您需要使用IsNull
method来检查值是否为空。这可以按如下方式完成:
var finalResults = (from r in results.AsEnumerable()
where !r.IsNull("SentOn") &&
DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
答案 3 :(得分:0)
您可以使用'if'语句在.Where方法中进行检查:
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();
答案 4 :(得分:0)
试试这个
dt.AsEnumerable().Where(r => r.Field<DateTime?>("SentOn") != null && DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7);
答案 5 :(得分:0)
空检查应该足够了。
var finalResults = results.AsEnumerable().Select(r => !r.IsNull(("SentOn"))
&& DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7)
如果这是重复模式,您可以创建扩展方法。