Подтвердить что ты не робот

Указанное приведение из материализованного типа System.Int32 к типу System.Double недопустимо

При выполнении следующего запроса я получаю сообщение об ошибке:

Указанное приведение из материализованного типа System.Int32 к Недопустимый тип System.Double.

var data = ctx.tblTO
                   .Where(m => m.Id == Id)
                   .GroupBy(m => m.EmployeeId)
                   .Select(m => new
                   {
                       workDay = m.Sum(k => k.WorkDay),
                       onDutyDay = m.Sum(k => k.OnDutyDay),
                       holiDay = m.Sum(k => k.Holiday)
                   })
                   .FirstOrDefault();

Тип данных WorkDay, OnDutyDay и Holiday - double. Здесь нет Int32, так почему я получаю эту ошибку?

Как я могу решить эту ошибку?

public class TO
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }           
    public int EmployeeId { get; set; }
    public double WorkDay { get; set; }
    public double OnDutyDay { get; set; }
    public double Holiday { get; set; }
}
4b9b3361

Ответ 1

Я думаю, что тип данных столбцов внутри вашей таблицы базы данных Int32, но ваша модель данных имеет double. Вам необходимо изменить типы данных ваших моделей данных на int. Под materialized это означает тип, который он получил при запуске запроса в базе данных.

Ответ 2

Сначала убедитесь, что тип данных модели и таблицы столбцов одинаковый.

Попытайтесь изменить свой запрос к этому.

var data = ctx.tblTO
           .Where(m => m.Id == Id)
           .GroupBy(m => m.EmployeeId)
           .Select(m => new
           {
               workDay = m.Select(k => k.WorkDay).DefaultIfEmpty(0).Sum(),
               onDutyDay = m.Select(k => k.OnDutyDay).DefaultIfEmpty(0).Sum(),
               holiDay = m.Select(k => k.Holiday).DefaultIfEmpty(0).Sum()
           })
           .FirstOrDefault();

Если коллекция пуста, она вернет один элемент со значением 0 и затем будет применена сумма.

Ответ 3

Для меня я звонил stored procedure из EF 6, из которого я написал poco, но я не писал sproc. Мне нужно было просмотреть все таблицы с полями, возвращающими типы данных. а затем измените мое Poco с int на логическое значение.

public Boolean Active { get; set; }