2016-07-14 3 views
0

Linq의 초보자가 기본 변환을 받고 있기 때문에 필터링을 통해 Datatable을 Dataview로 변환 할 때 Dataset으로 세부 사항을 가져 오도록 내 SQL 데이터베이스를 쿼리했습니다. 오류.'System.Byte'유형의 객체를 'System.String'유형으로 캐스팅 할 수 없습니다.

코드 : int로 캐스팅했을 때

DataView cktDv = (from clounceform in dsclounceForms.Tables["Table2"].AsEnumerable() 
             where clounceform.Field<string>("Form_FileType_ID").Equals("5") 
             select clounceform).CopyToDataTable().AsDataView(); 

예외가

Unable to cast object of type 'System.Byte' to type 'System.String'. 
System.Data.DataSetExtensions 
at System.Data.DataRowExtensions.UnboxT`1.ReferenceField(Object value) 
at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 
at ClounceFormsSuite.Design.CreateFormDesign.<>c.<CreateForm>b__12_0(DataRow bounceform) in myprojectfolderpath\CreateFormDesign.xaml.cs:line 115 
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext() 
at System.Data.DataTableExtensions.LoadTableFromEnumerable[T](IEnumerable`1 source, DataTable table, Nullable`1 options, FillErrorEventHandler errorHandler) 
at System.Data.DataTableExtensions.CopyToDataTable[T](IEnumerable`1 source) 
at ClounceFormsSuite.Design.CreateFormDesign.CreateForm(String[] cktFileContent, String filePath, String formID) in myprojectfolderpath\CreateFormDesign.xaml.cs:line 114 
at ClounceFormsSuite.Design.CreateFormDesign.UserControl_Loaded(Object sender, RoutedEventArgs e) in myprojectfolderpath\CreateFormDesign.xaml.cs:line 70 

내가 int로 문자열의 더 내가 변경 가리키고 캐스팅을 진행을 couldnt하고 다른 오류를주는 나에게 더 오해의 소지가있다

오류 :

Specified cast is not valid. 
+0

어쩌면이 도움이 될 것입니다. http://stackoverflow.com/questions/1003275/how-to-convert-byte-to-string – ViVi

+0

데이터베이스의 'Form_FileType_ID'은 어떤 데이터 유형입니까? – lokusking

+0

그것은 int 데이터 유형 –

답변

4

데이터는 byte 아닌 string 아닌 int이다. 따라서, 당신은 Field<byte>(...)를 사용해야합니다 :

가 나는 이것이 작동합니다 의심 :

where clounceform.Field<byte>("Form_FileType_ID") == (byte)5 
+0

에서 작동하지만 왜 그것을 캐스팅 할 때 변환하지 않는 int 데이터 유형이되지 않습니다. –

+2

@ArulManivannan **은 ** int가 아니기 때문에. 존재하지 않는 것에 unbox 할 수 없습니다. –

+1

@ArulManivannan : 나는 이것이 왜 혼란 스러운지 알 수 있습니다. 왜 int i = 5인지는 명확하지 않다. byte b = (byte) i;'는 유효하지만'object i = 5; 바이트 b = (바이트) i;는 그렇지 않습니다. 누락 된 것은 캐스트 연산자가 매우 다른 두 개의 연산에 대해 하나의 구문을 사용한다는 것입니다. 에릭 리 퍼트 (Eric Lippert)의 기사 [Representation and identity] (https://ericlippert.com/2009/03/03/representation-and-identity/)는이 구별을 설명하는 훌륭한 직업이다. – Brian

관련 문제