2

对于 DataTable 中的 DBNull 值,过滤器字符串的外观如何。

"IsNull("Column1", 'Null Column')='Null Column'"
"IsNull("Column1", 'Null Column')<>'Null Column'"

此字符串用于过滤 Column1 中的 Null 值。如果它是一个字符串列并且为其他类型抛出异常,它工作正常。

对此有任何想法吗?

而且我还想知道列对象类型的 Null 和 DBNull 是否相同?
在此处输入图像描述

        dt.Columns.Add(new DataColumn("Title", typeof (string)));
        dt.Columns.Add(new DataColumn("TitleID", typeof(Int32)) {AllowDBNull = true});
        dt.Columns.Add(new DataColumn("Date", typeof(object)) );
        dt.Columns.Add(new DataColumn("Desc", typeof(string)));

        for(int i =0; i<10; i++)
        {
            var input = i%2 == 0 ? (object) i : DBNull.Value;
            var result = input.Equals(DBNull.Value);

            DataRow row = dt.NewRow();
            row["Title"] = "C#" + i;
            row["TitleID"] = i % 2 == 0 ? (object) i : DBNull.Value;
            row["Date"] = i == 2 ? (object) DateTime.Now : DBNull.Value;
            row["Desc"] = i % 2 == 0 ? null : ""; 
            dt.Rows.Add(row);
        }

        DataView defView = dt.DefaultView;

        defView.RowFilter = "IsNull(Date, 'Null Column')='Null Column'";

        var filtered = defView;
4

2 回答 2

2

尝试

 dataView.RowFilter = "JoinDate IS null";
于 2017-03-03T07:07:14.887 回答
0

我正在过滤DataTable基于NULL电子邮件 ID:

  var results = from DataRow myRow in dtCustomer.Rows
                          where (object)myRow["EmailID"] == DBNull.Value
                          select myRow;
            DataTable dt = results.CopyToDataTable();

NULL并且DBNULL 这里有一个很好的解释。

根据msdn 的评论

   // DataTable dtCst = dtCustomer.Select("Isnull(EmailID,'Null Column') =
                                           'Null Column'").CopyToDataTable();
  //or
        DataView dataView = dtCustomer.DefaultView;
        dataView.RowFilter = "Isnull(EmailID,'Null Column') = 'Null Column'";

我还测试了JoinDatewhich is NULLin DB 和 datatype isdatetime并且还测试了datetype。

   dataView.RowFilter = "Isnull(JoinDate,'Null Column') = 'Null Column'";

更新

更新您的代码:

 dt.Columns.Add(new DataColumn("Date", typeof(DateTime)) { AllowDBNull = true });

在你的for loop

if (i == 2)
   {
      row["Date"] = DateTime.Now;
   }

然后过滤。它会起作用的。

于 2013-08-28T09:12:25.280 回答