A operação poderia desestabilizar o tempo de execução?

Estou com um pouco de dificuldade para entender qual é o problema aqui. Eu tenho um pouco de código que extrai registros de um banco de dados usando LINQ e os coloca em um objeto que é convertido em uma interface. Parece um pouco com isso:

public IEnumerable<ISomeObject> query()
{
    return from a in dc.SomeTable
           select new SomeObject
           {
             //Assign various members here
           } as ISomeObject;
}

Quando testei, coloquei o IEnumerable retornado em uma variável chamada results e execute esta linha:

Assert.AreEqual(EXPECTED_COUNT, results.Count());

Quando isso é executado, recebo uma System.Security.VerificationException: "A operação pode desestabilizar o tempo de execução."

Eu encontrei a soluçãoaqui, que é este:

var results = from a in dc.SomeTable
              select new SomeObject
              {
                //Assign various members here
              } as ISomeTable;
return results.OfType<ISomeObject>();

Isso funciona, mas estou tendo problemas para entender o que está acontecendo aqui. Por que recebi a exceção em primeiro lugar e como as linhas de código acima a corrigiram? A documentação do MSDN parece sugerir que esse é um problema de segurança de tipo, mas não estou vendo onde o código anterior era do tipo inseguro.

ATUALIZAR Um pouco mais de informação que eu descobri. O primeiro exemplo funciona se eu fizer o tipo de retorno IQueryable. Isso lança um pouco mais de luzo que estava errado, mas ainda estou confuso sobre oporque. Por que o compilador não me forçou a converter o IEnumerable em um IQueryable?

questionAnswers(9)

yourAnswerToTheQuestion