2017-10-18 4 views
0

주어진 유형에서 propertyInfos을 검색 중입니다.System.NotSupportedException : ''DataSet '이 (가) System.Nullable을 지원하지 않음 <>

System.NotSupportedException : 속성 유형 Nullable<int>의 경우 나는 예외가 있기 때문에

그때는 dataTable.columns 컬렉션에 속성 유형을 추가 할 수 없습니다 ''데이터 집합 ' 선택 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); 

    } 
} 

나는 그것이 작동되도록하는 경우-절에서 무엇을 변경해야합니까?

이미 컬렉션에 null 또는 DBNull을 추가했지만 도움이되지 않았습니다. 이 목적을 위해

+0

그냥 int로 시도해 봤어? int는 또한 유형입니다. 당신은 당신의 속성을 반복하는 동안 당신이 얻고있는 타입을 디버그하고 볼 수 있습니다. 따라서 어떤 유형을 비교해야 하는지를 인식 할 수 있습니다. 귀하의 속성이 Nullable 에서 왔을 때 typeof (int?)를 확인한 다음 'type yourIntType = Nullable.GetUnderlyingType (prop.PropertyType);을 통해 기본 유형을 가져올 수 있습니다. – Bagerfahrer

+0

[일반 목록/열거 가능 항목을 DataTable로 변환 하시겠습니까?] (https : //stackoverflow.com/a/5805044/3110834) –

답변

4

사용 null coalescing operatorNullable.GetUnderlyingType 방법 :

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

아직 거기에, 당신은 또한 nullable로 열을 설정해야합니다. – DavidG

+0

아니,'var column = dataTable.Columns.Add (...); column.AllowDBNull = true;'(물론'false') – DavidG

+1

@DavidG [AllowDBNull']의 기본값은 true입니다 (https://msdn.microsoft.com/en-us/library/system.data.datacolumn). .allowdbnull (v = .110) .aspx). –

관련 문제