Olá pessoal! Chegamos ao objetivo 2.3 da certificação Developing Microsoft Azure and Web Services, o Query data by using LINQ to Entities.
Esse objetivo cobre como 1) fazer queries usando LINQ, 2) IQueryable vs. IEnumerable e 3) logar queries. Vamos lá?
Fazendo queries usando LINQ
O objetivo desse ponto é mostrar que é possível utilizar LINQ to Entities de versões antigas do Entity Framework com ObjectContext, assim como se faz com DbContext.
Com ObjectContext, você cria um ObjectQuery que é virtualmente idêntico à aqueles do DbContext. Por exemplo:
IQueryable
where acct.AccountAlias == "Primary"
select acct;
É importante também saber que o ObjectQuery implementa IQueryable, IEnumerable e IListSource.
IQueryable vs. IEnumerable
IEnumerable é caracterizado por:
- Uso em LINQ to Objects e LINQ to XML;
- São performados em memória;
- São performados no heap.
IQueryable são notavelmente diferente na maioria dos casos:
- Rodam fora do processo;
- Suportam diferentes datasources, incluindo remotos;
- São usados em LINQ to Entities e LINQ to DataServices.
Logando Queries
Usando Entity Framework, às vezes se torna necessário você saber exatamente qual a query SQL o framework gerou automaticamente. Por exemplo:
IQueryable
where Acct.AccountAlias == "Primary"
select Acct;
Com ObjectQuery (ObjectContext), você pode obter a query fazendo um cast explícito para ObjectQuery e usar o método ToTraceString:
String Tracer = (Query as ObjectQuery).ToTraceString();
Com DbContext, é possível de maneira similar:
String Output = (from Acct in ContextName.ContextSet select Acct).ToString();
Isso é tudo para o conteúdo desse objetivo.
Obrigado pela leitura e acompanhe a continuação das postagens da certificação Microsoft 70-487, que será sobre o próximo objetivo Query and manipulate data by using ADO.NET.