Linq - la distribution spécifiée d'un type 'System.Int32' matérialisé vers le ' System.Double' n'est pas valide
Lors de l'exécution de la requête suivante, j'obtiens l'erreur: -
La distribution spécifiée à partir d'un type 'System.Int32' matérialisé "Système.Double' n'est pas valide.
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();
Le type de données de WorkDay, OnDutyDay, Holiday
est double
. Il n'y a pas de Int32
ici, alors pourquoi j'obtiens cette erreur?
Comment résoudre cette erreur?
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; }
}
2 réponses
Je pense que le type de données des colonnes dans votre table de base de données est Int32
mais votre modèle de données a double
. Vous devez modifier les types de données de vos modèles de données en int
. Par materialized
cela signifie le type qu'il a obtenu quand il a exécuté la requête sur la base de données.
Assurez-vous D'abord que votre modèle et votre type de données de colonne de table sont identiques.
Essayez de changer votre requête en ceci.
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();
Si la collection est vide, elle retournera un élément avec la valeur 0 et la somme sera appliquée.