The specified cast from a materialized 'System.Int32' type to the 'System.Double' type is not valid
Solution 1:
I think the data type of the columns inside your database table is Int32
but your data model has double
. You need to change the data types of your data models to int
. By materialized
it means the type it got when it ran the query on the database.
Solution 2:
First make sure your model and table column data type are same.
Try to change your query to this.
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();
If the collection is empty, it will return one element with the value of 0 and then the sum will be applied.