我有一個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