У меня есть запрос 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);
Однако возникает следующее исключение:
Указанное приведение материализованного типа System.Int32 к типу System.Int64 недопустимо. [..] Сведения об исключении: System.InvalidOperationException: указанное приведение материализованного типа 'System.Int32' к типу 'System.Int64' недопустимо.
Исходный файл: C: \ TempPersonalCode \ TransportTracking \ TransportTracking \ TransportTracking \ Controllers \ AJAXController.cs Строка: 35
(Строка 35 - это предложение выбора)
Я смущен, потому что если изменить:
select new { ClientDataID = clntDt.ClientDataID,
CompanyName = clntDt.CompanyName,
to
select new { ClientDataID = (Int32)clntDt.ClientDataID,
CompanyName = clntDt.CompanyName,
тогда все работает нормально. Разве анонимный объект не должен использовать отражение для определения своего типа? если да, то почему он решает, что это "Int32" вместо длинного? В EDMX это Int64.
ClientDataID
. - person vcsjones   schedule 29.04.2011