다음을 통해 공유


LINQ 쿼리 예제

 

게시 날짜: 2017년 1월

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

이 항목에는 많은 LINQ 쿼리 샘플이 들어 있습니다. 전체 샘플은 샘플: 복합 LINQ 쿼리를 참조하십시오.

이 항목의 내용

간단한 Where 절

조인 및 간단한 Where 절

Distinct 연산자 사용

간단한 내부 조인

셀프 조인

이중 및 다중 조인

엔터티 필드를 사용하여 조인

런타임에 바인딩 왼쪽 조인

Equals 연산자 사용

Not Equals 연산자 사용

Where 절로 메서드 기반 LINQ 쿼리 사용

Greater Than 연산자 사용

Greater Than or Equals 및 Less Than or Equals 연산자 사용

Contains 연산자 사용

Does Not Contain 연산자 사용

StartsWith 및 EndsWith 연산자 사용

And 및 Or 연산자 사용

OrderBy 연산자 사용

First 및 Single 연산자 사용

서식이 지정된 값 검색

페이징 없이 Skip 및 Take 연산자 사용

FirstOrDefault 및 SingleOrDefault 연산자 사용

연결된 엔터티에 조건이 있는 셀프 조인 사용

Where 절에 변환 사용

페이징 정렬 사용

1:N 관계에 대해 관련 엔터티 열 검색

.Value를 사용하여 특성 값 검색

여러 예측, 새로운 데이터 유형을 다른 유형으로 캐스팅

GetAttributeValue 메서드 사용

Math 메서드 사용

Multiple Select 및 Where 절 사용

SelectMany 사용

String 연산 사용

Where 절 두 개 사용

LoadProperty를 사용하여 관련 레코드 검색

간단한 Where 절

다음 샘플에서는 Name에 "Contoso"가 포함된 거래처 목록을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_where1 = from a in svcContext.AccountSet
                    where a.Name.Contains("Contoso")
                    select a;
 foreach (var a in query_where1)
 {
  System.Console.WriteLine(a.Name + " " + a.Address1_City);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_where1 = From c In svcContext.AccountSet _
                    Where c.Name.Contains("Contoso") _
                    Select c

 For Each c In query_where1
  Console.WriteLine(c.Name & " " & c.Address1_City)
 Next c
End Using

다음 샘플에서는 Name에 "Contoso"가 들어 있고 Address1_City가 “Redmond”인 거래처 목록을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_where2 = from a in svcContext.AccountSet
                    where a.Name.Contains("Contoso")
                    where a.Address1_City == "Redmond"
                    select a;

 foreach (var a in query_where2)
 {
  System.Console.WriteLine(a.Name + " " + a.Address1_City);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_where2 = From c In svcContext.AccountSet _
                    Where c.Name.Contains("Contoso") _
                    Where c.Address1_City.Equals("Redmond") _
                    Select c

 For Each c In query_where2
  Console.WriteLine(c.Name & " " & c.Address1_City)
 Next c
End Using

조인 및 간단한 Where 절

다음 샘플에서는 거래처 Name에 “Contoso”가 들어 있고 연락처 LastName에는 “Smith”가 들어 있으며 연락처가 계정의 기본 연락처인 계정 Name과 연락처 LastName을 검색하는 방법을 보여 줍니다.


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

Distinct 연산자 사용

다음 샘플에서는 연락처 성의 고유한 목록을 검색하는 방법을 보여 줍니다. 중복 항목이 있을 수 있지만 각 이름은 한 번만 나열됩니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_distinct = (from c in svcContext.ContactSet
                       select c.LastName).Distinct();
 foreach (var c in query_distinct)
 {
  System.Console.WriteLine(c);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_distinct = ( _
     From c In svcContext.ContactSet _
     Select c.LastName).Distinct()
 For Each c In query_distinct
  Console.WriteLine(c)
 Next c
End Using

간단한 내부 조인

다음 샘플에서는 거래처 및 거래처에 대해 기본 연락처로 나열된 연락처 정보를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_join1 = from c in svcContext.ContactSet
                   join a in svcContext.AccountSet
                  on c.ContactId equals a.PrimaryContactId.Id
                   select new
                   {
                    c.FullName,
                    c.Address1_City,
                    a.Name,
                    a.Address1_Name
                   };
 foreach (var c in query_join1)
 {
  System.Console.WriteLine("acct: " +
   c.Name +
   "\t\t\t" +
   "contact: " +
   c.FullName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_join1 = From c In svcContext.ContactSet _
                   Join a In svcContext.AccountSet _
                   On c.ContactId Equals a.account_primary_contact.Id _
                   Select New With {Key c.FullName, Key c.Address1_City,
                                    Key a.Name, Key a.Address1_Name}
 For Each c In query_join1
  Console.WriteLine("acct: " & c.Name & vbTab & vbTab _
                    & vbTab & "contact: " & c.FullName)
 Next c
End Using

셀프 조인

다음 샘플에서는 거래처가 거래처에 대한 상위 거래처인 거래처에 대한 정보를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_join5 = from a in svcContext.AccountSet
                   join a2 in svcContext.AccountSet
                   on a.ParentAccountId.Id equals a2.AccountId

                   select new
                   {
                    account_name = a.Name,
                    account_city = a.Address1_City
                   };
 foreach (var c in query_join5)
 {
  System.Console.WriteLine(c.account_name + "  " + c.account_city);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_join5 = From a In svcContext.AccountSet _
                   Join a2 In svcContext.AccountSet _
                   On a.ParentAccountId.Id Equals a2.AccountId _
                   Select New With {
                         Key .account_name = a.Name,
                         Key .account_city = a.Address1_City
                         }
 For Each c In query_join5
  Console.WriteLine(c.account_name & "  " & c.account_city)
 Next c
End Using

이중 및 다중 조인

다음 샘플에서는 연락처는 거래처에 대한 기본 연락처이고 잠재 고객은 거래처에 대해 원래 잠재 고객인 거래처, 연락처 및 잠재 고객의 정보를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_join4 = from a in svcContext.AccountSet
                   join c in svcContext.ContactSet
                   on a.PrimaryContactId.Id equals c.ContactId
                   join l in svcContext.LeadSet
                   on a.OriginatingLeadId.Id equals l.LeadId
                   select new
                   {
                    contact_name = c.FullName,
                    account_name = a.Name,
                    lead_name = l.FullName
                   };
 foreach (var c in query_join4)
 {
  System.Console.WriteLine(c.contact_name +
   "  " +
   c.account_name +
   "  " +
   c.lead_name);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_join4 = From a In svcContext.AccountSet _
                   Join c In svcContext.ContactSet _
                   On a.PrimaryContactId.Id Equals c.ContactId _
                   Join l In svcContext.LeadSet _
                   On a.OriginatingLeadId.Id Equals l.LeadId _
                   Select New With {Key .contact_name = c.FullName,
                                    Key .account_name = a.Name,
                                    Key .lead_name = l.FullName}
 For Each c In query_join4
  Console.WriteLine(c.contact_name & "  " & c.account_name _
                    & "  " & c.lead_name)
 Next c
End Using

다음 샘플에서는 거래처는 거래처에 대한 상위 거래처이고 연락처는 거래처에 대해 기본 연락처인 거래처 및 연락처 정보를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_join6 = from c in svcContext.ContactSet
                   join a in svcContext.AccountSet
                   on c.ContactId equals a.PrimaryContactId.Id
                   join a2 in svcContext.AccountSet
                   on a.ParentAccountId.Id equals a2.AccountId
                   select new
                   {
                    contact_name = c.FullName,
                    account_name = a.Name
                   };
 foreach (var c in query_join6)
 {
  System.Console.WriteLine(c.contact_name + "  " + c.account_name);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_join6 = From c In svcContext.ContactSet _
                   Join a In svcContext.AccountSet _
                   On c.ContactId Equals a.PrimaryContactId.Id _
                   Join a2 In svcContext.AccountSet _
                   On a.ParentAccountId.Id Equals a2.AccountId _
                   Select New With {Key .contact_name = c.FullName,
                                    Key .account_name = a.Name}
 For Each c In query_join6
  Console.WriteLine(c.contact_name & "  " & c.account_name)
 Next c
End Using

엔터티 필드를 사용하여 조인

다음 샘플에서는 목록에서 거래처에 대한 정보를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var list_join = (from a in svcContext.AccountSet
                  join c in svcContext.ContactSet
                  on a.PrimaryContactId.Id equals c.ContactId
                  where a.Name == "Contoso Ltd" &&
                  a.Address1_Name == "Contoso Pharmaceuticals"
                  select a).ToList();
 foreach (var c in list_join)
 {
  System.Console.WriteLine("Account " + list_join[0].Name
      + " and it's primary contact "
      + list_join[0].PrimaryContactId.Id);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim list_join = ( _
     From a In svcContext.AccountSet _
     Join c In svcContext.ContactSet _
     On a.PrimaryContactId.Id Equals c.ContactId _
     Where a.Name.Equals("Contoso Ltd") _
     And a.Address1_Name.Equals("Contoso Pharmaceuticals") _
     Select a).ToList()
 For Each c In list_join
  Console.WriteLine("Account " & list_join(0).Name _
                    & " and it's primary contact " _
                    & list_join(0).PrimaryContactId.Id.ToString())
 Next c
End Using

런타임에 바인딩 왼쪽 조인

다음 샘플은 왼쪽 조인을 표시합니다. 왼쪽 조인은 두 원본에서 하위 항목이 있는 상위 항목과 하위 항목이 없는 상위 항목을 반환하도록 설계되었습니다. 상위 항목과 하위 항목 사이에는 상관 관계가 있지만 하위 항목은 실제로 존재하지 않을 수 있습니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_join8 = from a in svcContext.AccountSet
                   join c in svcContext.ContactSet
                   on a.PrimaryContactId.Id equals c.ContactId
                   into gr
                   from c_joined in gr.DefaultIfEmpty()
                   select new
                   {
                    contact_name = c_joined.FullName,
                    account_name = a.Name
                   };
 foreach (var c in query_join8)
 {
  System.Console.WriteLine(c.contact_name + "  " + c.account_name);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_join8 = From a In svcContext.AccountSet _
                   Group Join c In svcContext.ContactSet _
                   On a.PrimaryContactId.Id Equals c.ContactId Into gr = _
                   Group From c_joined In gr.DefaultIfEmpty() _
                   Select New With {Key .contact_name = c_joined.FullName,
                                    Key .account_name = a.Name}
 For Each c In query_join8
  Console.WriteLine(c.contact_name & "  " & c.account_name)
 Next c
End Using

Equals 연산자 사용

다음 샘플에서는 FirstName이 "Colin"인 연락처 목록을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_equals1 = from c in svcContext.ContactSet
                     where c.FirstName.Equals("Colin")
                     select new
                     {
                      c.FirstName,
                      c.LastName,
                      c.Address1_City
                     };
 foreach (var c in query_equals1)
 {
  System.Console.WriteLine(c.FirstName +
   " " + c.LastName +
   " " + c.Address1_City);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_equals1 = From c In svcContext.ContactSet _
                     Where c.FirstName.Equals("Colin") _
                     Select New With {Key c.FirstName,
                                      Key c.LastName,
                                      Key c.Address1_City}
 For Each c In query_equals1
  Console.WriteLine(c.FirstName & " " & c.LastName & " " _
                    & c.Address1_City)
 Next c
End Using

다음 샘플에서는 FamilyStatusCode이 3인 연락처 목록을 검색하는 방법을 보여 줍니다. 이는 혼인 여부 옵션에서 이혼에 해당합니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_equals2 = from c in svcContext.ContactSet
                     where c.FamilyStatusCode.Equals(3)
                     select new
                     {
                      c.FirstName,
                      c.LastName,
                      c.Address1_City
                     };
 foreach (var c in query_equals2)
 {
  System.Console.WriteLine(c.FirstName +
   " " + c.LastName +
   " " + c.Address1_City);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_equals2 = From c In svcContext.ContactSet _
                     Where c.FamilyStatusCode.Equals(3) _
                     Select New With {Key c.FirstName,
                                      Key c.LastName,
                                      Key c.Address1_City}
 For Each c In query_equals2
  Console.WriteLine(c.FirstName & " " & c.LastName & " " _
                    & c.Address1_City)
 Next c
End Using

Not Equals 연산자 사용

다음 샘플에서는 Address1_City이 "Redmond"가 아닌 연락처 목록을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_ne1 = from c in svcContext.ContactSet
                 where c.Address1_City != "Redmond"
                 select new
                 {
                  c.FirstName,
                  c.LastName,
                  c.Address1_City
                 };
 foreach (var c in query_ne1)
 {
  System.Console.WriteLine(c.FirstName + " " +
   c.LastName + " " + c.Address1_City);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_ne1 = From c In svcContext.ContactSet _
                 Where c.Address1_City IsNot "Redmond" _
                 Select New With {Key c.FirstName,
                                  Key c.LastName,
                                  Key c.Address1_City}
 For Each c In query_ne1
  Console.WriteLine(c.FirstName & " " & c.LastName _
                    & " " & c.Address1_City)
 Next c
End Using

다음 샘플에서는 FirstName이 "Colin"이 아닌 연락처 목록을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_ne2 = from c in svcContext.ContactSet
                 where !c.FirstName.Equals("Colin")
                 select new
                 {
                  c.FirstName,
                  c.LastName,
                  c.Address1_City
                 };

 foreach (var c in query_ne2)
 {
  System.Console.WriteLine(c.FirstName + " " +
   c.LastName + " " + c.Address1_City);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_ne2 = From c In svcContext.ContactSet _
                 Where (Not c.FirstName.Equals("Colin")) _
                 Select New With {Key c.FirstName,
                                  Key c.LastName,
                                  Key c.Address1_City}

 For Each c In query_ne2
  Console.WriteLine(c.FirstName & " " & c.LastName & " " _
                    & c.Address1_City)
 Next c
End Using

Where 절로 메서드 기반 LINQ 쿼리 사용

다음 샘플에서는 LastName이 “Smith”이거나 “Smi”이 포함된 연락처 목록을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var methodResults = svcContext.ContactSet
  .Where(a => a.LastName == "Smith");
 var methodResults2 = svcContext.ContactSet
  .Where(a => a.LastName.StartsWith("Smi"));
 Console.WriteLine();
 Console.WriteLine("Method query using Lambda expression");
 Console.WriteLine("---------------------------------------");
 foreach (var a in methodResults)
 {
  Console.WriteLine("Name: " + a.FirstName + " " + a.LastName);
 }
 Console.WriteLine("---------------------------------------");
 Console.WriteLine("Method query 2 using Lambda expression");
 Console.WriteLine("---------------------------------------");
 foreach (var a in methodResults2)
 {
  Console.WriteLine("Name: " + a.Attributes["firstname"] +
   " " + a.Attributes["lastname"]);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim methodResults = svcContext.ContactSet _
                     .Where(Function(a) a.LastName.Equals("Smith"))
 Dim methodResults2 = svcContext.ContactSet _
                      .Where(Function(a) a.LastName.StartsWith("Smi"))
 Console.WriteLine()
 Console.WriteLine("Method query using Lambda expression")
 Console.WriteLine("---------------------------------------")
 For Each a In methodResults
  Console.WriteLine("Name: " & a.FirstName & " " & a.LastName)
 Next a
 Console.WriteLine("---------------------------------------")
 Console.WriteLine("Method query 2 using Lambda expression")
 Console.WriteLine("---------------------------------------")
 For Each a In methodResults2
  Console.WriteLine("Name: " & a.Attributes("firstname").ToString() _
                    & " " & a.Attributes("lastname").ToString())
 Next a
End Using

Greater Than 연산자 사용

다음 샘플에서는 2010년 2월 5일 이후 Anniversary 날짜가 포함된 연락처 목록을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_gt1 = from c in svcContext.ContactSet
                 where c.Anniversary > new DateTime(2010, 2, 5)
                 select new
                 {
                  c.FirstName,
                  c.LastName,
                  c.Address1_City
                 };

 foreach (var c in query_gt1)
 {
  System.Console.WriteLine(c.FirstName + " " +
   c.LastName + " " + c.Address1_City);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_gt1 = From c In svcContext.ContactSet _
                 Where c.Anniversary > New Date(2010, 2, 5) _
                 Select New With {Key c.FirstName,
                                  Key c.LastName,
                                  Key c.Address1_City}

 For Each c In query_gt1
  Console.WriteLine(c.FirstName & " " & c.LastName _
                    & " " & c.Address1_City)
 Next c
End Using

다음 샘플에서는 CreditLimit이 $20,000보다 큰 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_gt2 = from c in svcContext.ContactSet
                 where c.CreditLimit.Value > 20000
                 select new
                 {
                  c.FirstName,
                  c.LastName,
                  c.Address1_City
                 };
 foreach (var c in query_gt2)
 {
  System.Console.WriteLine(c.FirstName + " " +
   c.LastName + " " + c.Address1_City);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_gt2 = From c In svcContext.ContactSet _
                 Where c.CreditLimit.Value > 20000 _
                 Select New With {Key c.FirstName,
                                  Key c.LastName,
                                  Key c.Address1_City}
 For Each c In query_gt2
  Console.WriteLine(c.FirstName & " " & c.LastName _
                    & " " & c.Address1_City)
 Next c
End Using

Greater Than or Equals 및 Less Than or Equals 연산자 사용

다음 샘플에서는 CreditLimit이 $200보다 크고 $400보다 작은 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_gele1 = from c in svcContext.ContactSet
                   where c.CreditLimit.Value >= 200 &&
                   c.CreditLimit.Value <= 400
                   select new
                   {
                    c.FirstName,
                    c.LastName
                   };
 foreach (var c in query_gele1)
 {
  System.Console.WriteLine(c.FirstName + " " + c.LastName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_gele1 = From c In svcContext.ContactSet _
                   Where c.CreditLimit.Value >= 200 _
                   AndAlso c.CreditLimit.Value <= 400 _
                   Select New With {Key c.FirstName,
                                    Key c.LastName}
 For Each c In query_gele1
  Console.WriteLine(c.FirstName &amp; " " &amp; c.LastName)
 Next c
End Using

Contains 연산자 사용

다음 샘플에서는 Description에 "Alpine"이 포함된 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_contains1 = from c in svcContext.ContactSet
                       where c.Description.Contains("Alpine")
                       select new
                       {
                        c.FirstName,
                        c.LastName
                       };
 foreach (var c in query_contains1)
 {
  System.Console.WriteLine(c.FirstName + " " + c.LastName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_contains1 = From c In svcContext.ContactSet _
                       Where c.Description.Contains("Alpine") _
                       Select New With {Key c.FirstName,
                                        Key c.LastName}
 For Each c In query_contains1
  Console.WriteLine(c.FirstName &amp; " " &amp; c.LastName)
 Next c
End Using

Does Not Contain 연산자 사용

다음 샘플에서는 Description에 "Coho"가 포함되지 않은 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_contains2 = from c in svcContext.ContactSet
                       where !c.Description.Contains("Coho")
                       select new
                       {
                        c.FirstName,
                        c.LastName
                       };
 foreach (var c in query_contains2)
 {
  System.Console.WriteLine(c.FirstName + " " + c.LastName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_contains2 = From c In svcContext.ContactSet _
                       Where (Not c.Description.Contains("Coho")) _
                       Select New With {Key c.FirstName,
                                        Key c.LastName}
 For Each c In query_contains2
  Console.WriteLine(c.FirstName.ToString() &amp; " " _
                    &amp; c.LastName.ToString())
 Next c
End Using

StartsWith 및 EndsWith 연산자 사용

다음 샘플에서는 FirstName이 “Bri”로 시작하는 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_startswith1 = from c in svcContext.ContactSet
                         where c.FirstName.StartsWith("Bri")
                         select new
                         {
                          c.FirstName,
                          c.LastName
                         };
 foreach (var c in query_startswith1)
 {
  System.Console.WriteLine(c.FirstName + " " + c.LastName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_startswith1 = From c In svcContext.ContactSet _
                         Where c.FirstName.StartsWith("Bri") _
                         Select New With {Key c.FirstName,
                                          Key c.LastName}
 For Each c In query_startswith1
  Console.WriteLine(c.FirstName.ToString() &amp; " " _
                    &amp; c.LastName.ToString())
 Next c
End Using

다음 샘플에서는 LastName이 “cox”로 끝나는 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_endswith1 = from c in svcContext.ContactSet
                       where c.LastName.EndsWith("cox")
                       select new
                       {
                        c.FirstName,
                        c.LastName
                       };
 foreach (var c in query_endswith1)
 {
  System.Console.WriteLine(c.FirstName + " " + c.LastName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_endswith1 = From c In svcContext.ContactSet _
                       Where c.LastName.EndsWith("cox") _
                       Select New With {Key c.FirstName,
                                        Key c.LastName}
 For Each c In query_endswith1
  Console.WriteLine(c.FirstName.ToString() &amp; " " _
                    &amp; c.LastName.ToString())
 Next c
End Using

And 및 Or 연산자 사용

다음 샘플에서는 Address1_City가 “Redmond”이거나 “Bellevue”이고 CreditLimit가 $200보다 큰 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_andor1 = from c in svcContext.ContactSet
                    where ((c.Address1_City == "Redmond" ||
                    c.Address1_City == "Bellevue") &amp;&amp;
                    (c.CreditLimit.Value != null &amp;&amp;
                    c.CreditLimit.Value >= 200))
                    select c;

 foreach (var c in query_andor1)
 {
  System.Console.WriteLine(c.LastName + ", " + c.FirstName + " " +
   c.Address1_City + " " + c.CreditLimit.Value);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_andor1 = From c In svcContext.ContactSet _
                    Where c.Address1_City.Equals("Redmond") _
                    OrElse c.Address1_City.Equals("Bellevue") _
                    AndAlso c.CreditLimit.Value >= 200 _
                    Select New With {Key c.FirstName,
                                     Key c.LastName,
                                     Key c.CreditLimit,
                                     Key c.Address1_City}
 For Each c In query_andor1
  Console.WriteLine(c.LastName.ToString() &amp; ", " _
                    &amp; c.FirstName.ToString() &amp; " " _
                    &amp; c.Address1_City.ToString() &amp; " " _
                    &amp; c.CreditLimit.Value.ToString())
 Next c
End Using

OrderBy 연산자 사용

다음 샘플에서는 CreditLimit에 따라 내림차순으로 정렬되는 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_orderby1 = from c in svcContext.ContactSet
                      where !c.CreditLimit.Equals(null)
                      orderby c.CreditLimit descending
                      select new
                      {
                       limit = c.CreditLimit,
                       first = c.FirstName,
                       last = c.LastName
                      };
 foreach (var c in query_orderby1)
 {
  System.Console.WriteLine(c.limit.Value + " " +
   c.last + ", " + c.first);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_orderby1 = From c In svcContext.ContactSet _
                      Where (Not c.CreditLimit.Equals(Nothing)) _
                      Order By c.CreditLimit Descending _
                      Select New With {Key .limit = c.CreditLimit,
                                       Key .first = c.FirstName,
                                       Key .last = c.LastName}
 For Each c In query_orderby1
  Console.WriteLine(c.limit.Value &amp; " " &amp; c.last &amp; ", " _
                    &amp; c.first)
 Next c
End Using

다음 샘플에서는 LastName에 따라 내림차순으로 정렬되고 FirstName에 따라 오름차순으로 정렬되는 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_orderby2 = from c in svcContext.ContactSet
                      orderby c.LastName descending,
                      c.FirstName ascending
                      select new
                      {
                       first = c.FirstName,
                       last = c.LastName
                      };

 foreach (var c in query_orderby2)
 {
  System.Console.WriteLine(c.last + ", " + c.first);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_orderby2 = From c In svcContext.ContactSet _
                      Order By c.LastName Descending, _
                      c.FirstName Ascending _
                      Select New With {Key .first = c.FirstName,
                                       Key .last = c.LastName}

 For Each c In query_orderby2
  Console.WriteLine(c.last &amp; ", " &amp; c.first)
 Next c
End Using

First 및 Single 연산자 사용

다음 샘플에서는 반환되는 첫 번째 연락처와 조건과 일치하는 연락처 레코드만 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 Contact firstcontact = svcContext.ContactSet.First();

 Contact singlecontact = svcContext.ContactSet.Single(c => c.ContactId == _contactId1);
 System.Console.WriteLine(firstcontact.LastName + ", " +
  firstcontact.FirstName + " is the first contact");
 System.Console.WriteLine("==========================");
 System.Console.WriteLine(singlecontact.LastName + ", " +
  singlecontact.FirstName + " is the single contact");
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim firstcontact As Contact = svcContext.ContactSet _
                               .First()
 Console.WriteLine(firstcontact.LastName &amp; ", " _
                   &amp; firstcontact.FirstName _
                   &amp; " is the first contact")
 Console.WriteLine("==========================")
 Dim singlecontact As Contact =
     svcContext.ContactSet _
     .Single(Function(c) c.ContactId.Value.Equals(_contactId1))
 Console.WriteLine(singlecontact.LastName &amp; ", " _
                   &amp; singlecontact.FirstName _
                   &amp; " is the single contact")
End Using

서식이 지정된 값 검색

다음 샘플에서는 옵션 집합 옵션의 레이블, 이 경우에는 현재 레코드 상태의 값을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var list_retrieve1 = from c in svcContext.ContactSet
                      where c.ContactId == _contactId1
                      select new { StatusReason = c.FormattedValues["statuscode"] };
 foreach (var c in list_retrieve1)
 {
  System.Console.WriteLine("Status: " + c.StatusReason);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim list_retrieve1 = From c In svcContext.ContactSet _
                      Where c.ContactId.Value.Equals(_contactId1) _
                      Select New With
                             {Key .StatusReason =
                                 c.FormattedValues("statuscode")}
 For Each c In list_retrieve1
  Console.WriteLine("Status: " &amp; c.StatusReason)
 Next c
End Using

페이징 없이 Skip 및 Take 연산자 사용

다음 샘플에서는 SkipTake연산자를 사용하여 LastName이 “Parker”가 아닌 두 레코드를 건너뛴 후 두 레코드만 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{

 var query_skip = (from c in svcContext.ContactSet
                   where c.LastName != "Parker"
                   orderby c.FirstName
                   select new
                       {
                        last = c.LastName,
                        first = c.FirstName
                       }).Skip(2).Take(2);
 foreach (var c in query_skip)
 {
  System.Console.WriteLine(c.first + " " + c.last);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_skip = ( _
     From c In svcContext.ContactSet _
     Where c.LastName IsNot "Parker" _
     Order By c.FirstName _
     Select New With {Key .last = c.LastName,
                      Key .first = c.FirstName}).Skip(2).Take(2)
 For Each c In query_skip
  Console.WriteLine(c.first &amp; " " &amp; c.last)
 Next c
End Using

FirstOrDefault 및 SingleOrDefault 연산자 사용

FirstOrDefault 연산자는 시퀀스의 첫 번째 요소를 반환하거나 요소가 없을 경우 기본값을 반환합니다.SingleOrDefault 연산자는 시퀀스의 특정 단일 요소를 반환하거나 요소가 없을 경우 기본값을 반환합니다. 다음 샘플에서는 이러한 연산자를 사용하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{

 Contact firstorcontact = svcContext.ContactSet.FirstOrDefault();

 Contact singleorcontact = svcContext.ContactSet
  .SingleOrDefault(c => c.ContactId == _contactId1);


 System.Console.WriteLine(firstorcontact.FullName +
  " is the first contact");
 System.Console.WriteLine("==========================");
 System.Console.WriteLine(singleorcontact.FullName +
  " is the single contact");
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim firstorcontact As Contact =
     svcContext.ContactSet.FirstOrDefault()
 Console.WriteLine(firstorcontact.FullName &amp; " is the first contact")

 Console.WriteLine("==========================")
 Dim singleorcontact As Contact =
     svcContext.ContactSet _
     .SingleOrDefault(Function(c) c.ContactId.Value.Equals(_contactId1))
 Console.WriteLine(singleorcontact.FullName &amp; " is the single contact")
End Using

연결된 엔터티에 조건이 있는 셀프 조인 사용

다음 샘플에서는 거래처가 다른 거래처의 상위 거래처인 두 거래처의 이름을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_joincond = from a1 in svcContext.AccountSet
                      join a2 in svcContext.AccountSet
                      on a1.ParentAccountId.Id equals a2.AccountId
                      where a2.AccountId == _accountId1
                      select new { Account = a1, Parent = a2 };
 foreach (var a in query_joincond)
 {
  System.Console.WriteLine(a.Account.Name + " " + a.Parent.Name);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_joincond = From a1 In svcContext.AccountSet _
                      Join a2 In svcContext.AccountSet _
                      On a1.ParentAccountId.Id Equals a2.AccountId _
                      Where a2.AccountId.Value.Equals(_accountId1) _
                      Select New With {Key .Account = a1,
                                       Key .Parent = a2}
 For Each a In query_joincond
  Console.WriteLine(a.Account.Name &amp; " " &amp; a.Parent.Name)
 Next a
End Using

Where 절에 변환 사용

다음 샘플에서는 기념일 날짜가 2010년 1월 1일 이후인 특정 연락처를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_wheretrans = from c in svcContext.ContactSet
                        where c.ContactId == _contactId1 &amp;&amp;
                        c.Anniversary > DateTime.Parse("1/1/2010")
                        select new
                        {
                         c.FirstName,
                         c.LastName
                        };
 foreach (var c in query_wheretrans)
 {
  System.Console.WriteLine(c.FirstName + " " + c.LastName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_wheretrans = From c In svcContext.ContactSet _
                        Where c.ContactId.Value.Equals(_contactId1) _
                        AndAlso c.Anniversary > Date.Parse("1/1/2010") _
                        Select New With {Key c.FirstName,
                                         Key c.LastName}
 For Each c In query_wheretrans
  Console.WriteLine(c.FirstName &amp; " " &amp; c.LastName)
 Next c
End Using

페이징 정렬 사용

다음 샘플에서는 추가 조건이 있는 다중 열 정렬을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_pagingsort1 = (from c in svcContext.ContactSet
                          where c.LastName != "Parker"
                          orderby c.LastName ascending,
                          c.FirstName descending
                          select new { c.FirstName, c.LastName })
                          .Skip(2).Take(2);
 foreach (var c in query_pagingsort1)
 {
  System.Console.WriteLine(c.FirstName + " " + c.LastName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_pagingsort1 = ( _
     From c In svcContext.ContactSet _
     Where c.LastName IsNot "Parker" _
     Order By c.LastName Ascending, c.FirstName Descending _
     Select New With {Key c.FirstName,
                      Key c.LastName}).Skip(2).Take(2)
 For Each c In query_pagingsort1
  Console.WriteLine(c.FirstName &amp; " " &amp; c.LastName)
 Next c
End Using

다음 샘플에서는 정렬되는 열이 검색되는 열과 다른 페이징 정렬을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_pagingsort2 = (from c in svcContext.ContactSet
                          where c.LastName != "Parker"
                          orderby c.FirstName descending
                          select new { c.FirstName }).Skip(2).Take(2);
 foreach (var c in query_pagingsort2)
 {
  System.Console.WriteLine(c.FirstName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_pagingsort2 = ( _
     From c In svcContext.ContactSet _
     Where c.LastName IsNot "Parker" _
     Order By c.FirstName Descending _
     Select New With {Key c.FirstName}).Skip(2).Take(2)
 For Each c In query_pagingsort2
  Console.WriteLine(c.FirstName)
 Next c
End Using

다음 샘플에서는 첫 번째 10개 레코드를 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_pagingsort3 = (from c in svcContext.ContactSet
                          where c.LastName.StartsWith("W")
                          orderby c.MiddleName ascending,
                          c.FirstName descending
                          select new
                          {
                           c.FirstName,
                           c.MiddleName,
                           c.LastName
                          }).Take(10);
 foreach (var c in query_pagingsort3)
 {
  System.Console.WriteLine(c.FirstName + " " +
   c.MiddleName + " " + c.LastName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_pagingsort3 = ( _
     From c In svcContext.ContactSet _
     Where c.LastName.StartsWith("W") _
     Order By c.MiddleName Ascending, c.FirstName Descending _
     Select New With {Key c.FirstName,
                      Key c.MiddleName,
                      Key c.LastName}).Take(10)
 For Each c In query_pagingsort3
  Console.WriteLine(c.FirstName &amp; " " &amp; c.MiddleName &amp; " " &amp; c.LastName)
 Next c
End Using

1:N 관계에 대해 관련 엔터티 열 검색

다음 샘플에서는 관련 거래처 및 연락처 레코드에서 열을 검색하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_retrieve1 = from c in svcContext.ContactSet
                       join a in svcContext.AccountSet
                       on c.ContactId equals a.PrimaryContactId.Id
                       where c.ContactId != _contactId1
                       select new { Contact = c, Account = a };
 foreach (var c in query_retrieve1)
 {
  System.Console.WriteLine("Acct: " + c.Account.Name +
   "\t\t" + "Contact: " + c.Contact.FullName);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_retrieve1 = From c In svcContext.ContactSet _
                       Join a In svcContext.AccountSet _
                       On c.ContactId Equals a.PrimaryContactId.Id _
                       Where Not c.ContactId.Value.Equals(_contactId1) _
                       Select New With {Key .Contact = c,
                                        Key .Account = a}
 For Each c In query_retrieve1
  Console.WriteLine("Acct: " &amp; c.Account.Name &amp; vbTab &amp; vbTab _
                    &amp; "Contact: " &amp; c.Contact.FullName)
 Next c
End Using

.Value를 사용하여 특성 값 검색

다음 샘플에서는 특성의 값에 액세스하는 값 사용법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{

 var query_value = from c in svcContext.ContactSet
                   where c.ContactId != _contactId2
                   select new
                   {
                    ContactId = c.ContactId != null ?
                     c.ContactId.Value : Guid.Empty,
                    NumberOfChildren = c.NumberOfChildren != null ?
                     c.NumberOfChildren.Value : default(int),
                    CreditOnHold = c.CreditOnHold != null ?
                     c.CreditOnHold.Value : default(bool),
                    Anniversary = c.Anniversary != null ?
                     c.Anniversary.Value : default(DateTime)
                   };

 foreach (var c in query_value)
 {
  System.Console.WriteLine(c.ContactId + " " + c.NumberOfChildren + 
   " " + c.CreditOnHold + " " + c.Anniversary);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_value = From c In svcContext.ContactSet _
                   Where Not c.ContactId.Value.Equals(_contactId2) _
                   Select New With
                          {Key .ContactId = If(
                                  c.ContactId IsNot Nothing,
                                  c.ContactId.Value,
                                  Guid.Empty),
                           Key .NumberOfChildren = If(
                               c.NumberOfChildren IsNot Nothing,
                               c.NumberOfChildren.Value, Nothing),
                           Key .CreditOnHold = If(
                               c.CreditOnHold IsNot Nothing,
                               c.CreditOnHold.Value,
                               Nothing),
                           Key .Anniversary = If(
                               c.Anniversary IsNot Nothing,
                               c.Anniversary.Value,
                               Nothing)}

 For Each c In query_value
  Console.WriteLine(c.ContactId.ToString() &amp; " " _
                    &amp; c.NumberOfChildren &amp; " " _
                    &amp; c.CreditOnHold &amp; " " &amp; c.Anniversary)
 Next c
End Using

여러 예측, 새로운 데이터 유형을 다른 유형으로 캐스팅

다음 샘플에서는 여러 예측 및 다른 유형으로 값을 캐스팅하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_projections = from c in svcContext.ContactSet
                         where c.ContactId == _contactId1
                         &amp;&amp; c.NumberOfChildren != null &amp;&amp; 
                         c.Anniversary.Value != null
                         select new
                         {
                          Contact = new Contact { 
                           LastName = c.LastName, 
                           NumberOfChildren = c.NumberOfChildren 
                          },
                          NumberOfChildren = (double)c.NumberOfChildren,
                          Anniversary = c.Anniversary.Value.AddYears(1),
                         };
 foreach (var c in query_projections)
 {
  System.Console.WriteLine(c.Contact.LastName + " " + 
   c.NumberOfChildren + " " + c.Anniversary);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_projections = From c In svcContext.ContactSet _
                         Where c.ContactId.Value.Equals(_contactId1) _
                         And Not c.NumberOfChildren.Equals(Nothing) _
                         And Not c.Anniversary.Equals(Nothing) _
        Select New With
               {Key .Contact =
                   New Contact With
                   {.LastName = c.LastName,
                    .NumberOfChildren = c.NumberOfChildren},
                Key .NumberOfChildren = CDbl(c.NumberOfChildren),
                Key .Anniversary = c.Anniversary.Value.AddYears(1)}
 For Each c In query_projections
  Console.WriteLine(c.Contact.LastName &amp; " " &amp; c.NumberOfChildren _
                    &amp; " " &amp; c.Anniversary)
 Next c
End Using

GetAttributeValue 메서드 사용

다음 샘플에서는 GetAttributeValue<T> 메서드를 사용하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_getattrib = from c in svcContext.ContactSet
                       where c.GetAttributeValue<Guid>("contactid") != _contactId1
                       select new
                       {
                        ContactId = c.GetAttributeValue<Guid?>("contactid"),
                        NumberOfChildren = c.GetAttributeValue<int?>("numberofchildren"),
                        CreditOnHold = c.GetAttributeValue<bool?>("creditonhold"),
                        Anniversary = c.GetAttributeValue<DateTime?>("anniversary"),
                       };

 foreach (var c in query_getattrib)
 {
  System.Console.WriteLine(c.ContactId + " " + c.NumberOfChildren + 
   " " + c.CreditOnHold + " " + c.Anniversary);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_getattrib = From c In svcContext.ContactSet _
                       Where Not c.GetAttributeValue(Of Guid)("contactid").Equals( _
                        _contactId1) _
                       Select New With
                              {Key .ContactId =
                                  c.GetAttributeValue(Of Guid?)("contactid"),
                               Key .NumberOfChildren =
                               c.GetAttributeValue(Of Integer?)("numberofchildren"),
                               Key .CreditOnHold =
                               c.GetAttributeValue(Of Boolean?)("creditonhold"),
                               Key .Anniversary =
                               c.GetAttributeValue(Of Date?)("anniversary")}

 For Each c In query_getattrib
  Console.WriteLine(c.ContactId.ToString() &amp; " " _
                    &amp; c.NumberOfChildren &amp; " " &amp; c.CreditOnHold _
                    &amp; " " &amp; c.Anniversary)
 Next c
End Using

Math 메서드 사용

다음 샘플에서는 다양한 Math 메서드를 사용하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_math = from c in svcContext.ContactSet
                  where c.ContactId != _contactId2
                  &amp;&amp; c.Address1_Latitude != null &amp;&amp; 
                  c.Address1_Longitude != null
                  select new
                  {
                   Round = Math.Round(c.Address1_Latitude.Value),
                   Floor = Math.Floor(c.Address1_Latitude.Value),
                   Ceiling = Math.Ceiling(c.Address1_Latitude.Value),
                   Abs = Math.Abs(c.Address1_Latitude.Value),
                  };
 foreach (var c in query_math)
 {
  System.Console.WriteLine(c.Round + " " + c.Floor + 
   " " + c.Ceiling + " " + c.Abs);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_math = From c In svcContext.ContactSet _
                  Where Not c.ContactId.Value.Equals(_contactId2) _
                  AndAlso c.Address1_Latitude IsNot Nothing _
                  AndAlso c.Address1_Longitude IsNot Nothing _
                  Select New With
                         {Key .Round =
                             Math.Round(c.Address1_Latitude.Value),
                          Key .Floor =
                             Math.Floor(c.Address1_Latitude.Value),
                          Key .Ceiling =
                             Math.Ceiling(c.Address1_Latitude.Value),
                          Key .Abs =
                             Math.Abs(c.Address1_Latitude.Value)}
 For Each c In query_math
  Console.WriteLine(c.Round &amp; " " &amp; c.Floor &amp; " " _
                    &amp; c.Ceiling &amp; " " &amp; c.Abs)
 Next c
End Using

Multiple Select 및 Where 절 사용

다음 샘플에서는 메서드 기반 쿼리 구문을 사용하여 multiple select 및 where 절을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_multiselect = svcContext.IncidentSet
                        .Where(i => i.IncidentId != _incidentId1)
                        .Select(i => i.incident_customer_accounts)
                        .Where(a => a.AccountId != _accountId2)
                        .Select(a => a.account_primary_contact)
                        .OrderBy(c => c.FirstName)
                        .Select(c => c.ContactId);
 foreach (var c in query_multiselect)
 {
  System.Console.WriteLine(c.GetValueOrDefault());
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_multiselect =
     svcContext.IncidentSet _
     .Where(Function(i) Not i.IncidentId.Value.Equals(_incidentId1)) _
     .Select(Function(i) i.incident_customer_accounts) _
     .Where(Function(a) Not a.AccountId.Value.Equals(_accountId2)) _
     .Select(Function(a) a.account_primary_contact) _
     .OrderBy(Function(c) c.FirstName).Select(Function(c) c.ContactId)
 For Each c In query_multiselect
  Console.WriteLine(c.GetValueOrDefault())
 Next c
End Using

SelectMany 사용

다음 샘플에서는 SelectMany 메서드를 사용하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_selectmany = svcContext.ContactSet
                        .Where(c => c.ContactId != _contactId2)
                        .SelectMany(c => c.account_primary_contact)
                        .OrderBy(a => a.Name);
 foreach (var c in query_selectmany)
 {
  System.Console.WriteLine(c.AccountId + " " + c.Name);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_selectmany =
     svcContext.ContactSet _
     .Where(Function(c) Not c.ContactId.Value.Equals(_contactId2)) _
     .SelectMany(Function(c) c.account_primary_contact) _
     .OrderBy(Function(a) a.Name)
 For Each c In query_selectmany
  Console.WriteLine(c.AccountId.ToString() &amp; " " &amp; c.Name)
 Next c
End Using

String 연산 사용

다음 샘플에서는 다양한 String 메서드를 사용하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_string = from c in svcContext.ContactSet
                    where c.ContactId == _contactId2
                    select new
                    {
                     IndexOf = c.FirstName.IndexOf("contact"),
                     Insert = c.FirstName.Insert(1, "Insert"),
                     Remove = c.FirstName.Remove(1, 1),
                     Substring = c.FirstName.Substring(1, 1),
                     ToUpper = c.FirstName.ToUpper(),
                     ToLower = c.FirstName.ToLower(),
                     TrimStart = c.FirstName.TrimStart(),
                     TrimEnd = c.FirstName.TrimEnd(),
                    };

 foreach (var c in query_string)
 {
  System.Console.WriteLine(c.IndexOf + "\n" + c.Insert + "\n" + 
   c.Remove + "\n" + c.Substring + "\n"
                           + c.ToUpper + "\n" + c.ToLower + 
                           "\n" + c.TrimStart + " " + c.TrimEnd);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_string = From c In svcContext.ContactSet _
                    Where c.ContactId.Value.Equals(_contactId2) _
                    Select New With
                           {Key .IndexOf = c.FirstName.IndexOf("contact"),
                            Key .Insert = c.FirstName.Insert(1, "Insert"),
                            Key .Remove = c.FirstName.Remove(1, 1),
                            Key .Substring = c.FirstName.Substring(1, 1),
                            Key .ToUpper = c.FirstName.ToUpper(),
                            Key .ToLower = c.FirstName.ToLower(),
                            Key .TrimStart = c.FirstName.TrimStart(),
                            Key .TrimEnd = c.FirstName.TrimEnd()}

 For Each c In query_string
  Console.WriteLine(c.IndexOf &amp; vbLf &amp; c.Insert &amp; vbLf _
                    &amp; c.Remove &amp; vbLf &amp; c.Substring &amp; vbLf _
                    &amp; c.ToUpper &amp; vbLf &amp; c.ToLower &amp; vbLf _
                    &amp; c.TrimStart &amp; " " &amp; c.TrimEnd)
 Next c
End Using

Where 절 두 개 사용

다음 샘플에서는 Where 절 두 개를 사용하는 방법을 보여 줍니다.


using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var query_twowhere = from a in svcContext.AccountSet
                      join c in svcContext.ContactSet 
                      on a.PrimaryContactId.Id equals c.ContactId
                      where c.LastName == "Smith" &amp;&amp; c.CreditOnHold != null
                      where a.Name == "Contoso Ltd"
                      orderby a.Name
                      select a;
 foreach (var c in query_twowhere)
 {
  System.Console.WriteLine(c.AccountId + " " + c.Name);
 }
}

Using svcContext As New ServiceContext(_serviceProxy)
 Dim query_twowhere = From a In svcContext.AccountSet _
                      Join c In svcContext.ContactSet _
                      On a.PrimaryContactId.Id Equals c.ContactId _
                      Where c.LastName.Equals("Smith") _
                      AndAlso c.CreditOnHold IsNot Nothing _
                      Where a.Name.Equals("Contoso Ltd") _
                      Order By a.Name _
                      Select a
 For Each c In query_twowhere
  Console.WriteLine(c.AccountId.ToString() &amp; " " &amp; c.Name)
 Next c
End Using

LoadProperty를 사용하여 관련 레코드 검색

다음 샘플에서는 LoadProperty에서 관련 레코드에 액세스하는 방법을 보여 줍니다.


Contact benAndrews = svcContext.ContactSet.Where(c => c.FullName == "Ben Andrews").FirstOrDefault();
if (benAndrews != null)
{
 //benAndrews.Contact_Tasks is null until LoadProperty is used.
 svcContext.LoadProperty(benAndrews, "Contact_Tasks");
 Task benAndrewsFirstTask = benAndrews.Contact_Tasks.FirstOrDefault();
 if (benAndrewsFirstTask != null)
 {
  Console.WriteLine("Ben Andrews first task with Subject: '{0}' retrieved.", benAndrewsFirstTask.Subject);
 }
}

참고 항목

LINQ(.NET 언어 통합 쿼리)를 사용하여 쿼리 작성
샘플: LINQ 쿼리 만들기

Microsoft Dynamics 365

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