2017-10-18 91 views
0

我从给定类型检索propertyInfosSystem.NotSupportedException:''DataSet'不支持System.Nullable <>

当属性是Nullable<int>类型的话,我不能属性类型添加到收藏dataTable.columns因为我得到一个异常:

System.NotSupportedException:“”数据集”支持不 System.Nullable < >“。

foreach (var prop in propertyInfos) 
{ 
    if (prop.PropertyType == typeof(int?)) 
    { 
     dataTable.Columns.Add(prop.Name, prop.PropertyType); 
    } 
    else 
    { 
     dataTable.Columns.Add(prop.Name, prop.PropertyType); 

    } 
} 

,我应该怎么了,如果从句的改变,使其工作?

我已经将nullDBNull添加到收藏中,但这并没有帮助?!

+0

你只是尝试诠释? int也是一个类型。您可以调试并查看迭代属性时获取的类型。所以你可以识别你需要比较哪种类型。当你的属性是可空您可以检查typeof运算,然后得到通过'类型yourIntType = Nullable.GetUnderlyingType(prop.PropertyType)的基本类型(INT);' – Bagerfahrer

+0

[?转换泛型列表/可枚举到数据表(HTTPS ://stackoverflow.com/a/5805044/3110834) –

回答

4

使用null coalescing operatorNullable.GetUnderlyingType方法用于此目的:

dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(
           prop.PropertyType) ?? prop.PropertyType); 
+0

不是那样,你还需要设置列为空。 – DavidG

+0

不,我的意思是'var column = dataTable.Columns.Add(...); column.AllowDBNull = TRUE;'(或'当然FALSE') – DavidG

+1

@DavidG默认它真正为['AllowDBNull'](https://msdn.microsoft.com/en-us/library/system.data.datacolumn .allowdbnull(v = vs.110)的.aspx)。 –

相关问题