如何在c# LINQ查询中测试数据表字段是否为NULL ?

本文关键字:字段 数据表 是否 NULL 测试数据 测试 LINQ 查询 | 更新日期: 2023-09-27 18:14:55

我有一个c# LINQ,我正在运行一个数据表。查询方式如下:

var results = from myRow in dtDetails.AsEnumerable()
      where
           myRow.Field<DateTime>("ddceffect") > DateTime.Today.AddDays(-7)
           && myRow.Field<int>("ddcamtproc") == 0
      select myRow;

字段"ddcamrproc"为空

我得到以下异常:

myRow.Field<int>("ddcamtproc")' threw an exception of type 'System.InvalidCastException'

在执行查询的其余部分之前,如何更改LINQ查询以测试字段是否为null ?

谢谢,JohnB

如何在c# LINQ查询中测试数据表字段是否为NULL ?

Field方法支持可空类型:

...   && myRow.Field<int?>("ddcamtproc") == 0

你也可以试试这个方法。

var results = dtDetails.AsEnumerable()
              .Where(x => x.ddceffect > DateTime.Today.AddDays(-7) && 
                    x.ddcamtproc.HasValue && x.ddcamtproc.Value == 0);

var results = dtDetails.AsEnumerable()
              .Where(x => x.ddceffect.Substract(DateTime.Today) == -7 
                 && x.ddcamtproc.HasValue && x.ddcamtproc.Value == 0);

因为int是从system派生的。Struct,所以你需要写int?in Field to Field<int?>("ddcamtproc") == 0

无论在c#中使用任何值类型。如果它接受空值,您可以使用可空类型(如int?)