gpt4 book ai didi

LINQ 在 bigint 上抛出无效的强制转换异常

转载 作者:行者123 更新时间:2023-12-02 11:52:26 34 4
gpt4 key购买 nike

我有一个看起来像这样的 LINQ 查询:

var clintLst = (from clntDt in ent.ClientDatas
where clntDt.CompanyName.Substring(0,searchWord.Length).Equals(searchWord, StringComparison.CurrentCultureIgnoreCase)
orderby clntDt.CompanyName
select new { ClientDataID = clntDt.ClientDataID,
CompanyName = clntDt.CompanyName,
ContactName = (clntDt.ContactFirstName + " " + clntDt.ContactLastName),
CompanyLocation = clntDt.Location.LocationCity.CityName + ", " + clntDt.Location.LocationState.StateCode
} ).Distinct().Take(10);

但是,它抛出以下异常:

The specified cast from a materialized 'System.Int32' type to the 'System.Int64' type is not valid. [..] Exception Details: System.InvalidOperationException: The specified cast from a materialized 'System.Int32' type to the 'System.Int64' type is not valid.

Source File: C:\TempPersonalCode\TransportTracking\TransportTracking\TransportTracking\Controllers\AJAXController.cs Line: 35

(第35行是select子句)

我很困惑,因为如果改变:

select new { ClientDataID = clntDt.ClientDataID,
CompanyName = clntDt.CompanyName,

select new { ClientDataID = (Int32)clntDt.ClientDataID,
CompanyName = clntDt.CompanyName,

然后就可以正常工作了。匿名对象不应该使用反射来确定它的类型吗?如果是这样,为什么它决定它是“Int32”而不是 long ?在 EDMX 中,我将其作为 Int64。

最佳答案

短语“物化值(value)”是指从数据存储中检索的值。

可能发生的情况是,数据库将该列配置为 int,但在您的 EDMX 文件中,它是 long(或 Int64 )。

您放在前面的 (Int32) 转换(可能)被转换为数据存储(在 SQL Server 中,这意味着类似于 CAST([columnName] AS int),因此, Entity Framework 现在期望获得 int 而不是 long

如果没有强制转换,它需要一个 long 但得到一个 int

解决方案是更改 EDMX 文件或更改列,使 EDMX 文件中的数据类型与数据库中的数据类型匹配。

(乔特)

关于LINQ 在 bigint 上抛出无效的强制转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5826919/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com