Для преобразования между некоторыми объектами 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 () таким образом много раз в прошлом, и когда вы приводите что-то вроде базового типа к производному типу, он работает нормально, но падает, когда у объекта есть явный оператор приведения.