Usar LINQ para criar um consulta
Publicado: novembro de 2016
Aplicável a: Dynamics CRM 2015
O provedor de consulta do .NET LINQ (Language-Integrated Query) do Atualização do Microsoft Dynamics CRM 2015 e Microsoft Dynamics CRM Online 2015 usa a sintaxe do LINQ padrão. A primeira etapa da criação de uma consulta do LINQ é identificar os tipos de entidade relevantes e os relacionamentos entre eles. É possível especificar a fonte de dados e os outros parâmetros da consulta.
A cláusula from é usada para retornar uma única entidade “raiz”. O provedor de consulta pode retornar somente entidades de um único tipo de entidade. As cláusulas orderby e select devem fazer referência a esta entidade raiz. É possível usar as cláusulas join para adicionar entidades com um relacionamento à entidade “raiz”.
Neste tópico
Operadores do LINQ
Limitações do LINQ
Filtrar várias entidades
Operadores do LINQ
Todas as expressões de consulta do LINQ têm um formato semelhante. A tabela a seguir mostra as cláusulas mais comuns em uma expressão de consulta do LINQ ao usar o provedor de consulta do LINQ do Microsoft Dynamics 365.
Operador do LINQ |
Descrição |
Exemplo |
---|---|---|
Obtenha uma fonte de dados (a cláusula from) |
Ao usar o contexto de serviço gerado e a associação inicial, use o conjunto de entidades IQueryable, como AccountSet, no contexto gerado. Quando não estiver usando o contexto gerado, o método CreateQuery no objeto de contexto de serviço da organização permite acesso às entidades Microsoft Dynamics 365. |
Como usar o contexto de serviço gerado:
Usando o método CreateQuery:
|
cláusula join |
A cláusula join representa uma junção interna. Use a cláusula para trabalhar com duas ou mais entidades que podem ser unidas com um valor de atributo comum. |
|
Filtrando (a cláusula where) |
A cláusula where aplica um filtro aos resultados, geralmente com uma expressão booliana. O filtro especifica quais elementos devem ser excluídos da sequência de origem. Cada cláusula where só pode conter condições para um único tipo de entidade. Um condição composta que envolve várias entidades é inválida. Em vez disso, cada entidade deve ser filtrada em cláusulas where separadas. |
|
orderby |
O operador orderby coloca os atributos retornados pela consulta em uma ordem especificada. |
|
cláusula select |
A cláusula select define o formulário dos dados retornados. A cláusula cria um conjunto de colunas com base nos resultados da expressão da consulta. Também é possível definir uma instância de um novo objeto para trabalhar com ela. O objeto recém-criado que usa a cláusula select não é criado no servidor, mas é uma instância local. |
|
Limitações do LINQ
O provedor de consulta do LINQ oferece suporte a um subconjunto dos operadores do LINQ. Nem todas as condições que podem ser expressas no LINQ têm suporte. A tabela a seguir mostra algumas das limitações dos operadores básicos do LINQ.
Operador do LINQ |
Limitações |
---|---|
join |
Representa uma junção interna. Não é possível executar junções externas. |
from |
Oferece suporte a uma cláusula from por consulta. |
where |
O lado esquerdo da cláusula deve ser um nome de atributo e o lado direito da cláusula deve ser um valor. Não é possível definir o lado esquerdo para uma constante. Os dois lados da cláusula não podem ser constantes. Oferece suporte às funções de String: Contains, StartsWith, EndsWith e Equals. |
groupBy |
Sem suporte. O FetchXML oferece suporte às opções de agrupamento que não estão disponíveis com o provedor de consulta do LINQ.Para obter mais informações:Use a agregação FetchXML |
orderBy |
Oferece suporte à ordenação por atributos de entidade, como Contact.FullName. |
select |
Oferece suporte a tipos anônimos, construtores e inicializadores. |
last |
Não há suporte para o operador last. |
skip e take |
Oferece suporte aos operadores skip e take com a paginação do lado do servidor. O valor de skip deve ser maior ou igual ao valor de take. |
aggregate |
Sem suporte. O FetchXML oferece suporte às opções de agregação que não estão disponíveis com o provedor de consulta do LINQ.Para obter mais informações:Use a agregação FetchXML |
Filtrar várias entidades
É possível criar consultas do Microsoft Dynamics CRM 2015 complexas no .NET LINQ (Language-Integrated Query) e no Microsoft Dynamics CRM Online. Use várias cláusulas Join com as cláusulas de filtragem para criar um resultado que é filtrado nos atributos de várias entidades.
O exemplo a seguir mostra como criar uma consulta do LINQ que trabalha com duas entidades e filtra os resultados com base nos valores de cada uma das entidades.
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
var query_where3 = from c in svcContext.ContactSet
join a in svcContext.AccountSet
on c.ContactId equals a.PrimaryContactId.Id
where a.Name.Contains("Contoso")
where c.LastName.Contains("Smith")
select new
{
account_name = a.Name,
contact_name = c.LastName
};
foreach (var c in query_where3)
{
System.Console.WriteLine("acct: " +
c.account_name +
"\t\t\t" +
"contact: " +
c.contact_name);
}
}
Using svcContext As New ServiceContext(_serviceProxy)
Dim query_where3 = From c In svcContext.ContactSet _
Join a In svcContext.AccountSet _
On c.ContactId Equals a.account_primary_contact.Id _
Where a.Name.Contains("Contoso") _
Where c.LastName.Contains("Smith") _
Select New With {Key .account_name = a.Name,
Key .contact_name = c.LastName}
For Each c In query_where3
Console.WriteLine("acct: " & c.account_name & vbTab & vbTab _
& vbTab & "contact: " & c.contact_name)
Next c
End Using
Confira Também
Exemplo: Criar uma consulta LINQ
Exemplo: Consultas de LINQ complexas
Compilação de consultas com o LINQ (Language-Integrated Query do .NET)
Usar classe de entidades late bound com uma consulta do LINQ
Blog: Plug-in do LINQPad para o Microsoft Dynamics CRM 2011
© 2017 Microsoft. Todos os direitos reservados. Direitos autorais