2009-09-04 95 views
0

我有一个DataTable包含列将包含DbNull值。我想使用Linq并输出一个新的DataTable,但我希望DbNull值被保存。下面是一个示例:Linq与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(); 

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

+0

它**是**坚持...只是尝试,你会看到在cars2的第二行中的“C1”仍然是DBNull.Value – 2009-09-04 13:08:24

+0

顺便说一句,你不需要写'System.Type.GetType (“System.String”)':你可以做'typeof(String)' – 2009-09-04 13:09:12

回答

1

Thomas是正确的 - CopyToDataTable()DBNull字段值没有任何特别之处。然而,在DataRow上的Field<T>扩展方法确实返回nullDBNull - 您是否使用它来测试cars2