共用方式為


LINQ 查詢範例

 

發行︰ 2017年1月

適用於: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

本主題包含多個 LINQ 查詢範例。 如需完整範例,請參閱 範例:複雜 LINQ 查詢

本主題內容

簡易「Where」子句

加入和簡易「Where」子句

使用 distinct 運算子

簡易內部聯結

Self Join

Double 與 Multiple Joins

使用實體欄位聯結

晚期繫結 Left Join

使用 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 運算子

在連結的實體使用設定條件的 Self Join

在 Where 子句中使用轉換

使用分頁排序

擷取 1 對 N 關聯的相關實體欄

使用 .value 來擷取屬性的值

各種規劃、新資料類型轉換為不同類型的資料類型

使用 GetAttributeValue 方法

使用數學方法

使用多重選取與 Where 子句

使用 SelectMany

使用字串作業

使用兩個 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 和聯絡人 LastName,帳戶 Name 包含「Contoso」且聯絡人 LastName 包含「Smith」,而且聯絡人為客戶的主要聯絡人。


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

Self Join

下列範例顯示如何取得有關客戶的資訊,該客戶屬於客戶的上層客戶。


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

Double 與 Multiple Joins

以下範例顯示如何取得以下資訊:客戶、連絡人以及潛在客戶 (連絡人為此客戶的主要連絡人),以及來自客戶的潛在客戶的潛在客戶。


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

晚期繫結 Left Join

下列範例示範 left join 左聯結是設計用於從兩個來源回傳給上層,在不管有或沒有下層的狀況。 上層與下層之間有關聯性,但下層屬性可能不實際存在。


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 運算子

下列範例會顯示如何擷取 Anniversary 日期比 2010 年 2 月 5 日以後的連絡人清單。


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

擷取格式化的值

下列範例顯示如何擷取 optionset 選項,在此情況下目前選項值標籤。


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 運算子而不用分頁

下列範例顯示如何在跳過兩筆紀錄後僅擷取兩筆資料,而 LastName 不是「Parker」(使用 SkipTake 運算子)。


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

在連結的實體使用設定條件的 Self Join

下列範例顯示如何取得兩名客戶的名稱,一名客戶是另一名客戶的上層客戶。


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 來擷取屬性的值

下列範例顯示使用 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

使用數學方法

下列範例示範如何使用不同的數學方法。


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

使用多重選取與 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

使用字串作業

下列範例示範如何使用不同的字串方法。


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 Language Integrated Query) 的查詢
範例:建立 LINQ 查詢

Microsoft Dynamics 365

© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權