Указанное приведение из материализованного типа 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; }
}
Ответы
Ответ 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; }