如何在C#LINQ查询中测试DataTable字段的NULL?

时间:2016-10-25 15:32:35

标签: c# linq

我有一块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

3 个答案:

答案 0 :(得分:2)

Field method支持可以为空的teypes:

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

答案 1 :(得分:0)

您也可以尝试这种方式。

[INFO] Scanning for projects...
[ERROR] [ERROR] Could not find the selected project in the reactor: rest @
[ERROR] Could not find the selected project in the reactor: rest -> [Help 1]

OR

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

答案 2 :(得分:0)

由于int是从system.struct派生的,所以你需要编写int?在字段Field<int?>("ddcamtproc") == 0

在C#中,您使用的是任何值类型。如果它取空值你可以使用可空类型(如int?)