Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The specified cast from a materialized 'System.Int32' type to the 'System.Double' type is not valid

When executing the following query, I get the error:

The specified cast from a materialized 'System.Int32' type to the 'System.Double' type is not valid.

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();

The datatype of WorkDay, OnDutyDay and Holiday is double. There is no Int32 here, so why do I get this error?

How can I solve this error?

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; }
}
like image 883
Anup Avatar asked Aug 28 '15 06:08

Anup


2 Answers

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.

like image 98
yohannist Avatar answered Nov 12 '22 13:11

yohannist


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.

like image 41
Ajay Avatar answered Nov 12 '22 15:11

Ajay