У меня есть запрос 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\Контроллеры\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.