다음을 통해 공유


LINQ 쿼리에 런타임에 바인딩 엔터티 클래스 사용

 

게시 날짜: 2017년 1월

적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Microsoft Dynamics 365 및 Microsoft Dynamics 365(온라인)에서 .NET LINQ(Language-Integrated Query) 쿼리에 런타임에 바인딩을 사용할 수 있습니다. 런타임에 바인딩은 특성 논리적 이름을 사용하고 런타임에 해결됩니다.

이 항목의 내용

join 절에서 런타임에 바인딩 사용

왼쪽 조인에서 런타임에 바인딩 사용

런타임에 바인딩 및 Contains 메서드 사용

런타임에 바인딩 및 not equals 연산자 사용

GetAttributeValue 메서드 사용

join 절에서 런타임에 바인딩 사용

다음 예제에서는 LINQ 쿼리의 join 절에서 런타임에 바인딩을 사용하는 방법을 보여 줍니다.

거래처와 거래처 이름에 대한 기본 연락처를 나타내는 연락처의 전체 이름을 검색합니다.


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

잠재 고객은 원래 잠재 고객이고 연락처의 성은“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

왼쪽 조인에서 런타임에 바인딩 사용

다음 예제에서는 왼쪽 조인을 사용하여 연락처 및 거래처 정보 목록을 검색하는 방법을 보여 줍니다. 왼쪽 조인은 두 원본에서 하위 항목이 있는 상위 항목과 하위 항목이 없는 상위 항목을 반환하도록 설계되었습니다. 상위 항목과 하위 항목 사이에는 상관 관계가 있지만 하위 항목은 실제로 존재하지 않을 수 있습니다.


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

런타임에 바인딩 및 Contains 메서드 사용

다음 예제에서는 LINQ 쿼리의 Contains 메서드로 런타임에 바인딩을 사용하는 방법을 보여 줍니다.


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

런타임에 바인딩 및 not equals 연산자 사용

다음 예제에서는 not equals 연산자를 사용하는 방법을 보여 줍니다.


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

GetAttributeValue 메서드 사용

다음 예제에서는 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

참고 항목

CreateQuery<TEntity>
LINQ(.NET 언어 통합 쿼리)를 사용하여 쿼리 작성
LINQ를 사용하여 엔터티 특성을 사용한 결과 쿼리

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 저작권 정보