繁体   English   中英

从具体化的“System.Int32”类型到“System.Double”类型的指定转换无效

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

执行以下查询时,出现错误:

从具体化的“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();

WorkDayOnDutyDayHoliday的数据类型是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; }
}

我认为数据库表中列的数据类型是Int32但你的数据模型有double 您需要将数据模型的数据类型更改为int materialized意味着它在数据库上运行查询时得到的类型。

首先确保您的模型和表列数据类型相同。

尝试将您的查询更改为此。

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 的元素,然后应用总和。

对我来说,我从 EF 6 调用了一个stored procedure ,其中我写了一个 poco,但我没有写 sproc。 我需要查看所有具有字段返回数据类型的表。 然后将我的 Poco 从 int 更改为 boolean。

public Boolean Active { get; set; }

除了其他答案之外,我还遇到了另一种情况,我遇到了同样的错误。 也就是说,在我们的存储过程中, bigint被转换为十进制,而在C# ,同样的事情被转换为 int64。 看:

SELECT Cast(@Request_Id as decimal) AS RetValue

我所做的是将查询更改为:

SELECT @Request_Id AS RetValue

所以,我删除了额外的演员表,问题就消失了。 不知何故,它可能会引发某种算术异常,但还不太确定。 如果我知道确切原因,将很快更新。

PS:我的@Request_Id变量是bigint类型。

DECLARE @Request_Id bigint = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM