2009-09-04 3 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(); 

Как столбец С1 второго ряда имеют значение DBNull быть perserved в cars2 DataTable?

+0

Это ** ** сохраняется ... просто попробуйте, вы увидите, что «C1» во втором ряду автомобилей2 все еще DBNull.Value –

+0

Кстати, вам не нужно писать 'System.Type.GetType («System.String») ': вы можете просто сделать' typeof (String) ' –

ответ

1

Thomas is correct - CopyToDataTable() ничего общего с DBNull значениями полей. Тем не менее, метод расширения Field<T> на DataRow действительно возвращает null для DBNull - использовали ли вы это для тестирования cars2?

Смежные вопросы