Certificação Microsoft 70-487: Objetivo 2.3 – Query data by using LINQ to Entities

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 query = from acct in Context.Accounts
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 Query = from Acct in Context.Accounts
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.

Até mais!Query and manipulate data by using ADO.NET