O método de extensão LINQ .Cast () falha, mas o objeto (tipo) funciona

Para converter entre alguns objetos LINQ to SQL e DTOs, criamos operadores de conversão explícitos nos DTOs. Dessa forma, podemos fazer o seguinte:

DTOType MyDTO = (LinqToSQLType)MyLinq2SQLObj;

Isso funciona bem.

No entanto, quando você tenta converter usando o método de extensão LINQ .Cast (), ele lança uma exceção de conversão inválida, dizendo que não é possível converter o tipo Linq2SQLType para digitar DTOType. ou seja, o abaixo não funciona

List<DTO.Name> Names = dbContact.tNames.Cast<DTO.Name>()
                                               .ToList();

Mas o abaixo funciona bem:

DAL.tName MyDalName = new DAL.tName();
DTO.Name MyDTOName = (DTO.Name)MyDalName;

e o abaixo também funciona bem

List<DTO.Name> Names = dbContact.tNames.Select(name => (DTO.Name)name)
                                               .ToList();

Por que o método de extensão .Cast () gera uma exceção de conversão inválida? Eu usei o método de extensão .Cast () dessa maneira várias vezes no passado e, quando você está lançando algo como um tipo base para um tipo derivado, ele funciona bem, mas cai quando o objeto tem um operador de conversão explícito.

questionAnswers(3)

yourAnswerToTheQuestion