【问题标题】:Linq with DbNull values具有 DbNull 值的 Linq
【发布时间】:2009-09-04 12:55:40
【问题描述】:

我有一个包含 DbNull 值的列的 DataTable。我想使用 Linq 并输出一个新的 DataTable,但我希望保留 DbNull 值。这是一个例子:

        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("C1",System.Type.GetType("System.String")));
        dt.Columns.Add(new DataColumn("C2",System.Type.GetType("System.String")));
        DataRow row;
        row = dt.NewRow();
        row["C1"] = "Hello";
        row["C2"] = "World";
        dt.Rows.Add(row);
        row = dt.NewRow();
        row["C1"] = DBNull.Value;
        row["C2"] = "World";
        dt.Rows.Add(row);

        var cars1 = from car in dt.AsEnumerable()
                    where car.Field<String>("C2") == "World"
                    select car;
        DataTable cars2 = cars1.CopyToDataTable();

第二行C1列的DbNull值如何保存在cars2 DataTable中?

【问题讨论】:

  • 持久化了……试试看,你会看到cars2第二行的“C1”仍然是DBNull.Value
  • 顺便说一句,你不需要写System.Type.GetType("System.String"):你可以写typeof(String)

标签: linq


【解决方案1】:

Thomas 是正确的 - CopyToDataTable()DBNull 字段值没有什么特别之处。但是,DataRow 上的 Field&lt;T&gt; 扩展方法确实为 DBNull 返回了 null - 您是否使用它来测试 cars2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多