C# 从物化的“System.Double”类型到“System.Int32”类型的指定强制转换无效,但未定义双精度转换

C# 从物化的“System.Double”类型到“System.Int32”类型的指定强制转换无效,但未定义双精度转换,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,问候,, 我正在做一个我认为非常简单的程序,我创建了一个三列的视图,定义为String、int和DATETIME。下图 Create View [dbo].[vw_findFaulty] AS WITH CTE_getMAXDate AS ( Select DeviceId,MAX(Createtime) as maxLastDate from locationhistory group by DeviceId ) SELECT B.DeviceName,DeviceId

问候,, 我正在做一个我认为非常简单的程序,我创建了一个三列的视图,定义为String、int和DATETIME。下图

Create View [dbo].[vw_findFaulty]
AS
WITH CTE_getMAXDate AS
(
    Select DeviceId,MAX(Createtime) as maxLastDate
    from locationhistory
    group by DeviceId
)
SELECT B.DeviceName,DeviceId,maxLastDate FROM CTE_getMAXDate A
INNER JOIN dbo.devices B 
ON A.DeviceId=B.id
where maxLastDate < dateadd(week,-3,getdate())
我得到的错误是,从具体化的“System.Double”类型到“System.Int32”类型的指定强制转换无效

除此之外,我找不到任何关于双人间的参考资料,我110%确信这以前是有效的。 如果有人能告诉我在哪里可以找到这个错误,我将不胜感激


谢谢

假设数据库模型属性如下所示:

public int DeviceId { get; set; }
public string DeviceName { get; set; }
public DateTime maxLastDate { get; set; }
作为一种快速修复方法,有必要使用CAST子句确保视图返回完全相同的数据类型:

创建视图[dbo]。[vw_findFaulty] 像 将CTE_getMAXDate作为 选择DeviceId,MAXCreatetime作为maxLastDate 从位置历史 按设备ID分组 -DeviceId的显式强制转换 -如果DATETIME列也返回类似错误,请使用CASTmaxLastDate作为DATETIME 选择B.DeviceName,CASTDeviceId为INT,maxLastDate从CTE_getMAXDate中作为 将dbo.devices内部连接为B 在A.DeviceId=B.id上 其中maxLastDate 类似问题:


我对EntityFramework也有类似的问题。只需从表中选择两列,并创建匿名类型,例如

ctx.mytable.Selectf=>new{f.column1,f.column2}

在测试中工作,而不是在生产中

问题是column2的生产数据库中的数据类型与我的实体模型edmx不同

在测试列2上是一个tinyint,在生产中是一个int。模型是一个tinyint

public int DeviceId { get; set; }
public string DeviceName { get; set; }
public DateTime maxLastDate { get; set; }