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