Partilhar via


Usar classe de entidades late bound com uma consulta do LINQ

 

Publicado: novembro de 2016

Aplicável a: Dynamics CRM 2015

No Microsoft Dynamics CRM 2015 e no Microsoft Dynamics CRM Online, é possível usar a associação tardia com as consultas do .NET LINQ (Language-Integrated Query). A associação tardia usa o nome lógico do atributo e é resolvida no tempo de execução.

Neste tópico

Como usar a associação tardia em uma cláusula de associação

Como usar a associação tardia em uma associação restante

Como usar a associação tardia e o método Contains

Como usar a associação tardia e o operador "não igual a"

Como usar o método GetAttributeValue

Como usar a associação tardia em uma cláusula de associação

Os exemplos a seguir mostram como usar a associação tardia na cláusula join de uma consulta do LINQ.

Recupere o nome completo do contato que representa o contato principal de uma conta e o nome da conta.


using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
 var query_join2 = from c in orgSvcContext.CreateQuery("contact")
                   join a in orgSvcContext.CreateQuery("account")
                   on c["contactid"] equals a["primarycontactid"]
                   select new
                   {
                    contact_name = c["fullname"],
                    account_name = a["name"]
                   };
 foreach (var c in query_join2)
 {
  System.Console.WriteLine(c.contact_name + "  " + c.account_name);
 }
}

Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
 Dim query_join2 = From c In orgSvcContext.CreateQuery("contact") _
                   Join a In orgSvcContext.CreateQuery("account") _
                   On c("contactid") Equals a("primarycontactid") _
                   Select New With {Key .contact_name = c("fullname"),
                                    Key .account_name = a("name")}
 For Each c In query_join2
  Console.WriteLine(c.contact_name.ToString() & "  " _
                    & c.account_name.ToString())
 Next c
End Using

Recupere o Contato, a Conta e o Cliente Potencial, onde o Cliente Potencial era o Cliente Potencial originador e o sobrenome do Contato não seja ”Parker“


using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
 var query_dejoin = from c in orgSvcContext.CreateQuery("contact")
                    join a in orgSvcContext.CreateQuery("account") 
                    on c["contactid"] equals a["primarycontactid"]
                    join l in orgSvcContext.CreateQuery("lead") 
                    on a["originatingleadid"] equals l["leadid"]
                    where (string)c["lastname"] != "Parker"
                    select new { Contact = c, Account = a, Lead = l };
 foreach (var c in query_dejoin)
 {
  System.Console.WriteLine(c.Account.Attributes["name"] + " " + 
   c.Contact.Attributes["fullname"] + " " + c.Lead.Attributes["leadid"]);
 }
}

Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
 Dim query_dejoin = From c In orgSvcContext.CreateQuery("contact") _
                    Join a In orgSvcContext.CreateQuery("account")
                    On c("contactid") Equals a("primarycontactid") _
                    Join l In orgSvcContext.CreateQuery("lead") _
                    On a("originatingleadid") Equals l("leadid") _
                    Select New With {Key .Contact = c,
                                     Key .Account = a,
                                     Key .Lead = l}
 For Each c In query_dejoin
  Console.WriteLine(c.Account.Attributes("name").ToString() _
                    & " " _
                    & c.Contact.Attributes("fullname").ToString() _
                    & " " _
                    & c.Lead.Attributes("leadid").ToString())
 Next c
End Using

Como usar a associação tardia em uma associação restante

O exemplo a seguir mostra como recuperar uma lista de informações de Contato e Conta usando uma associação restante. Uma associação restante é projetada para retornar pais com e sem filhos de duas fontes. Há uma correlação entre o pai e o filho, mas nenhum filho pode realmente existir.


using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
 var query_join9 = from a in orgSvcContext.CreateQuery("account")
                   join c in orgSvcContext.CreateQuery("contact") 
                   on a["primarycontactid"] equals c["contactid"] into gr
                   from c_joined in gr.DefaultIfEmpty()
                   select new
                   {
                    account_name = a.Attributes["name"]
                   };
 foreach (var c in query_join9)
 {
  System.Console.WriteLine(c.account_name);
 }
}

Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
 Dim query_join9 = From a In orgSvcContext.CreateQuery("account") _
                   Group Join c In orgSvcContext.CreateQuery("contact") _
                   On a("primarycontactid") Equals c("contactid") Into gr = _
                   Group From c_joined In gr.DefaultIfEmpty() _
                   Select New With {Key .account_name = a.Attributes("name")}
 For Each c In query_join9
  Console.WriteLine(c.account_name)
 Next c
End Using

Como usar a associação tardia e o método Contains

O exemplo a seguir mostra como usar a associação tardia com o método Contains em uma consulta do LINQ.


using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
 var query_contains3 = from c in orgSvcContext.CreateQuery("contact")
                       where ((string)c["description"]).Contains("Coho")
                       select new
                       {
                        firstname = c.Attributes["firstname"],
                        lastname = c.Attributes["lastname"]
                       };
 foreach (var c in query_contains3)
 {
  System.Console.WriteLine(c.firstname + " " + c.lastname);
 }
}

Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
 Dim query_contains3 = From c In orgSvcContext.CreateQuery("contact") _
                       Where (CStr(c("description"))).Contains("Coho") _
                       Select New With
                             {Key .firstname = c.Attributes("firstname"),
                             Key .lastname = c.Attributes("lastname")}

 For Each c In query_contains3
  Console.WriteLine(c.firstname.ToString() & " " _
                    & c.lastname.ToString())
 Next c
End Using

Como usar a associação tardia e o operador "não igual a"

O exemplo a seguir mostra como usar o operador "não igual a".


using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
 var query_ne3 = from c in orgSvcContext.CreateQuery("contact")
                 where !c["address1_city"].Equals(null)
                 select new
                 {
                  FirstName = c["firstname"],
                  LastName = c["lastname"],
                  Address1_City = c["address1_city"]
                 };
 foreach (var c in query_ne3)
 {
  System.Console.WriteLine(c.FirstName + " " + 
   c.LastName + " " + c.Address1_City);
 }
}

Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
 Dim query_ne3 = From c In orgSvcContext.CreateQuery("contact") _
                 Where (Not c("address1_city").Equals(Nothing)) _
                 Select New With {Key .FirstName = c("firstname"),
                                  Key .LastName = c("lastname"),
                                  Key .Address1_City =
                                  c("address1_city")}
 For Each c In query_ne3
  Console.WriteLine(c.FirstName.ToString() & " " _
                    & c.LastName.ToString() & " " _
                    & c.Address1_City.ToString())
 Next c
End Using

Como usar o método GetAttributeValue

O exemplo a seguir mostra como recuperar informações de Contato usando o método GetAttributeValue.


using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{

 var list_getattrib1 = (from c in orgSvcContext.CreateQuery("contact")
                        where c.GetAttributeValue<Guid?>("contactid") != _contactId1
                        select new { 
                         FirstName = c.GetAttributeValue<string>("firstname"), 
                         LastName = c.GetAttributeValue<string>("lastname") 
                        }).ToList();
 foreach (var c in list_getattrib1)
 {
  System.Console.WriteLine(c.FirstName + " " + c.LastName);
 }
}

Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
 Dim list_getattrib1 = ( _
     From c In orgSvcContext.CreateQuery("contact") _
     Where Not c.GetAttributeValue(Of Guid?)("contactid") _
     .Value.Equals(_contactId1) _
     Select New With
            {
             Key .FirstName = c.GetAttributeValue(Of String)("firstname"),
             Key .LastName = c.GetAttributeValue(Of String)("lastname")}
         ).ToList()
 For Each c In list_getattrib1
  Console.WriteLine(c.FirstName &amp; " " &amp; c.LastName)
 Next c
End Using

Confira Também

CreateQuery<TEntity>
Compilação de consultas com o LINQ (Language-Integrated Query do .NET)
Solicitar resultados usando atributos da entidade com LINQ

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais