我有一个LINQ查询,看起来像这样扔无效转换异常:LINQ在BIGINT
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);
但是,它抛出以下异常:
从物化指定的强制转换 'System.Int32'类型为 'System.Int64'类型无效。 [..] 异常详细信息: System.InvalidOperationException: 指定从物化 'System.Int32'类型转换为 'System.Int64'类型无效。
源文件: C:\ TempPersonalCode \ TransportTracking \ TransportTracking \ TransportTracking \ \控制器AJAXController.cs 线:35
(第35行是SELECT子句)
我很困惑因为如果变化:
select new { ClientDataID = clntDt.ClientDataID,
CompanyName = clntDt.CompanyName,
到
select new { ClientDataID = (Int32)clntDt.ClientDataID,
CompanyName = clntDt.CompanyName,
然后它工作正常。是不是一个匿名对象应该使用反射来确定它的类型?如果是这样,为什么它决定它是一个“Int32”而不是一长?在EDMX中,我将它作为Int64。
一个匿名对象根本不使用反射。它根据'ClientDataID'的返回类型在编译时推断类型。 – vcsjones 2011-04-29 01:34:42
@vcsjones:更重要的是,为什么这是令人困惑的:P 但是,谢谢你纠正我。 – KTF 2011-04-29 13:18:23