在C#VS2013中的System.Data.DataTable中将列定义为可为空

Lil*_*ily 3 .net c# visual-studio

我需要在C#VS2013中定义一个System.Data.DataTable.

在一列中,它可以是int或null.

但我得到了:

  DataSet does not support System.Nullable<>.
Run Code Online (Sandbox Code Playgroud)

对于定义:

  public DataTable myDataTable
  myDataTable = new DataTable("myName");
  myDataTable.Columns.Add("ID", typeof(Int32)); 
  myDataTable.Columns.Add("value1", typeof(Int32?)); // run time error 
  myDataTable.Columns.Add("value2", typeof(Int32?)); 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?解决?

使列Dullable后,

 DataColumn dc = myDataTable.Columns.Add("value1", typeof(Int32));
 dc.AllowDBNull = true;
Run Code Online (Sandbox Code Playgroud)

当我查询它时,我得到了

  "Sequence contains no elements". 
Run Code Online (Sandbox Code Playgroud)

请参阅更新.

UPDATE

    int? result = (from r in myDataTable.AsEnumerable()
                  where r.Field<Int32>("ID") == givenID
                    && r.Field<Int32?>("value1") == givenValue1
                    select r.Field<Int32>("value2")).First();
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 6

它是DataColumn的属性

public DataTable myDataTable
myDataTable = new DataTable("myName");
myDataTable.Columns.Add("ID", typeof(Int32)); 
DataColumn dc = myDataTable.Columns.Add("value1", typeof(Int32)); 
dc.AllowDBNull = true;
Run Code Online (Sandbox Code Playgroud)

关于AllowDBNull的MSDN

  • 这是一个不同的问题.如果查询结果不匹配,则不能使用First,因为'sequence'不包含任何元素.而是使用FirstOrDefault (2认同)

Sad*_*ani 6

尝试

  public DataTable myDataTable
  myDataTable = new DataTable("myName");
  myDataTable.Columns.Add("ID", typeof(Int32)); 
  myDataTable.Columns.Add(new DataColumn { ColumnName = "VALUE1", DataType = typeof(int), AllowDBNull = true });
  myDataTable.Columns.Add(new DataColumn { ColumnName = "VALUE2", DataType = typeof(int), AllowDBNull = true });
Run Code Online (Sandbox Code Playgroud)

这将使值列可以为空

并在插入时

DataRow dr = myDataTable.NewRow();
dr["VALUE1"] = object.value1==null? (object)DBNull.Value : object.value1;
Run Code Online (Sandbox Code Playgroud)

这将执行所需的操作