Сбой метода расширения LINQ .Cast (), но (тип) объект работает
Для преобразования между некоторыми объектами LINQ to SQL и DTO мы создали явные операторы приведения в DTO. Таким образом, мы можем сделать следующее:
DTOType MyDTO = (LinqToSQLType)MyLinq2SQLObj;
Это хорошо работает.
Однако, когда вы пытаетесь выполнить приведение с использованием метода расширения LINQ .Cast (), оно выдает недопустимое исключение приведения, говоря, что не может привести тип Linq2SQLType к типу DTOType. то есть ниже не работает
List<DTO.Name> Names = dbContact.tNames.Cast<DTO.Name>()
.ToList();
Но ниже работает отлично:
DAL.tName MyDalName = new DAL.tName();
DTO.Name MyDTOName = (DTO.Name)MyDalName;
и ниже тоже отлично работает
List<DTO.Name> Names = dbContact.tNames.Select(name => (DTO.Name)name)
.ToList();
Почему метод расширения .Cast () генерирует недопустимое исключение приведения? Я использовал метод расширения .Cast () таким образом много раз в прошлом, и когда вы приводите что-то вроде базового типа к производному типу, он работает нормально, но падает, когда объект имеет явный оператор приведения.