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

时间:2015-07-08 09:56:31

标签: c# .net linq

我在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吗?

6 个答案:

答案 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)

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