Система.InvalidCastException: указанное приведение недопустимо (запрос linq)

#c# #linq

#c# #linq

Вопрос:

Указанное приведение недопустимо ошибка в строке: выберите новый файл.Модели.FileDetail() . DTTT в коде — это datatable , FileDetial — это класс в модели, который имеет Filename , Dt, receivedcount,параметры состояния. Я проверил все типы данных полей, и они верны. Не уверен, почему я получаю эту ошибку.

 return (from row in DTTT.AsEnumerable()
                        select new File.Models.FileDetail()
                         {
                             Filename = row.Field<string>("name"),
                             Dt = row.Field<DateTime?>("Dt"),
                             ReceivedCount = row.Field<int?>("count"),
                             status = row.Field<string>("status")

                         }

                    ).ToList();
  

Комментарии:

1. можно Dt ли обнулять и ReceivedCount обнулять?

2. Каков их соответствующий DbType — Filename,Dt,receivedcount,status , один из них не является типом, который вы пытаетесь ввести

3. Какой тип возвращается из метода?

4. Вы должны добавить сведения об исключении, которые вы получаете

5. @MrinalKamboj вы правы, мой DT DbType был char, и в модели я объявил как Datetime. Теперь это работает.

Ответ №1:

Вы должны иметь возможность привести его как TimeSpan :

  Dt = row.Field<TimeSpan>("Dt");
  

или

 Dt = (DateTime)(row.Field<DateTime>("Dt") == DBNull.Value ? DateTime.MinValue :row.Field<DateTime>("Dt"));
  

Ответ №2:

Dbtype моего поля «DT» равно char, а поле свойства ReceivedCount объявлено как Datetime в моей модели. Таким образом, возникло недопустимое исключение приведения. изменение типа данных моего поля модели на string сработало. Спасибо всем.