2016-07-14 2 views
0

Запросил базу данных SQL для извлечения данных в набор данных при преобразовании Datatable в Dataview путем фильтрации, поскольку, будучи новичком в Linq, я получаю базовое преобразование ошибка.Невозможно наложить объект типа «System.Byte» на тип «System.String»

Код:

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 

Я не мог идти дальше я Infact изменил отливку строки в целое и дает другую ошибку, которая вводит в заблуждение меня больше Когда пытались кастинг в целое

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

ошибка:

Specified cast is not valid. 
+0

Может быть, это поможет. http://stackoverflow.com/questions/1003275/how-to-convert-byte-to-string – ViVi

+0

Какой DataType является 'Form_FileType_ID' в вашей базе данных? – lokusking

+0

Он в int datatype –

ответ

4

Данные является byte, не string, а не int. Таким образом, вы должны использовать Field<byte>(...):

Я подозреваю, что это будет работать:

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

Он работал, но почему он не работает, являясь внутренним типом данных, который он не конвертирует, когда я его бросаю. –

+2

@ArulManivannan, потому что это ** не ** 'int'. Вы не можете делить вещи на то, чего нет. –

+1

@ArulManivannan: Я понимаю, почему это сбивает с толку. Непонятно, почему «int i = 5; байт b = (байт) i; 'является законным, тогда как' объект i = 5; байт b = (байт) i; 'нет. То, что вам не хватает, заключается в том, что оператор трансляции использует один синтаксис для двух очень разных операций. Статья Эрика Липперта, [Представительство и личность] (https://ericlippert.com/2009/03/03/representation-and-identity/), отлично подходит для объяснения различия. – Brian

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