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呢?

c# linq如何检查空值在同一列,我需要不为空

如果字段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)

如果这是一个重复的模式,您可以创建一个扩展方法。