KTF*_*KTF 11 linq linq-to-entities
我有一个看起来像这样的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);
Run Code Online (Sandbox Code Playgroud)
但是,它抛出以下异常:
从物化的"System.Int32"类型到"System.Int64"类型的指定强制转换无效.[..]异常详细信息:System.InvalidOperationException:从实现的"System.Int32"类型到"System.Int64"类型的指定强制转换无效.
源文件:C:\ TempPersonalCode\TransportTracking\TransportTracking\TransportTracking\Controllers\AJAXController.cs Line:35
(第35行是select子句)
我很困惑,因为如果改变:
select new { ClientDataID = clntDt.ClientDataID,
CompanyName = clntDt.CompanyName,
Run Code Online (Sandbox Code Playgroud)
至
select new { ClientDataID = (Int32)clntDt.ClientDataID,
CompanyName = clntDt.CompanyName,
Run Code Online (Sandbox Code Playgroud)
然后它工作正常.是不是一个匿名对象应该使用反射来确定它的类型?如果是这样,为什么它决定它是"Int32"而不是长?在EDMX中我把它作为Int64.
Rya*_*yan 18
短语"具体化值"是指从数据存储中检索的值.
可能发生的是数据库将该列配置为int,但在您的EDMX文件中它是long(或Int64).
(Int32)您放在前面的演员阵容(可能)被翻译到数据存储区(在SQL Server中,这意味着类似的东西CAST([columnName] AS int),因此,实体框架现在期望得到一个int而不是一个long.
没有演员阵容,它会期待一场long比赛int.
解决方案是更改EDMX文件或更改列,以便EDMX文件中的数据类型与数据库中的数据类型匹配.
(jhott)
| 归档时间: |
|
| 查看次数: |
11729 次 |
| 最近记录: |