Uma dica rápida, sabia que é possível ver o código SQL que será executado no banco de dados de uma consulta feita com LINQ to Entities? É uma excelente forma de poder ver o que irá acontecer, ver se sua query em LINQ é realmente o que você quer e, em caso de erros, conseguir realizar mais facilmente um trace da aplicação sem ter de recorrer a opções como um Profiler no servidor SQL.
Segue na Listagem 1 uma consulta simples a uma base que já foi mostrada aqui em outro artigo:
exampleEntities ex = new exampleEntities(); var query = from c in ex.Pessoa.OfType() select c;
Listagem 1. Consulta em LINQ to Entities
O segredo para converter esta consulta em LINQ para SQL está na classe ObjectQuery do namesapce System.Data.Objects. A Listagem 2 mostra como converter a sua consulta em Object Query e obter a consulta SQL.
ObjectQuery oQuery = (ObjectQuery)query; string cmdSQL = oQuery.ToTraceString();
Listagem 2. Mostrando a consulta SQL
e como resultado temos a consulta mostrada na Listagem 3
SELECT '0X0X' AS [C1], [Extent1].[Id] AS [Id], [Extent1].[Nome] AS [Nome], [Extent2].[CPF] AS [CPF], [Extent2].[Data_Nascimento] AS [Data_Nascimento] FROM [dbo].[Pessoa] AS [Extent1] INNER JOIN [dbo].[Pessoa_PessoaFisica] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Id]
Listagem 3. Código SQL que será executado