使用 LINQ 建構查詢
發行︰ 2017年1月
適用於: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online
在 Microsoft Dynamics 365 (線上和內部部署) 中的 .NET Language-Integrated Query (LINQ) 查詢提供者使用標準 LINQ 語法。 建立 LINQ 查詢的第一個步驟是識別相關實體類型與它們之間的關聯。 然後您可以指定資料來源以及其他查詢參數。
from 子句用來傳回單一 "根" 實體。 查詢提供者只傳回單一實體類型的實體。orderby 和 select 子句必須參考此根實體。 您可以使用 join 子句新增具有關聯的實體至 "根" 實體。
本主題內容
LINQ 運算子
LINQ 的限制
篩選多個實體
LINQ 運算子
所有 LINQ 查詢運算式具有類似的格式。 下表說明使用 Microsoft Dynamics 365 LINQ 查詢提供者時,LINQ 查詢運算式中最常用的子句。
LINQ 運算子 |
描述 |
範例 |
---|---|---|
取得資料來源 (from 子句) |
使用產生的服務內容和早期繫結時,請在產生的內容中使用 IQueryable 實體集,例如 AccountSet。 若未使用產生的內容,組織服務內容物件上的 CreateQuery 方法可讓您存取 Microsoft Dynamics 365 實體。 |
使用產生的服務內容:
使用 CreateQuery 方法:
|
join 子句 |
join 子句代表內部聯結。 使用子句可以使用兩個或多個實體,它們可使用通用屬性值聯結。 |
|
篩選 (where 子句) |
where 子句會套用篩選至結果,通常使用布林值運算式。 篩選會指定哪些項目要從來源序列中排除。 每個 where 子句只能包含單一實體類型的條件。 包含多個實體的複合條件無效。 每個實體應該另外在不同的 where 子句中篩選。 |
|
orderby |
orderby 運算子會依照指定的順序放置傳回的查詢屬性。 |
|
select 子句 |
select 子句會定義傳回的資料形式。 子句會依據查詢運算式結果建立欄集合。 您也可以定義要使用的新物件執行個體。 使用 select 子句新建立的物件不會在伺服器上建立,而是本機執行個體。 |
|
LINQ 的限制
LINQ 查詢提供者支援 LINQ 運算子的子集。 並非所有可用 LINQ 表示的條件都支援。 下表列出基本 LINQ 運算子的一些限制。
LINQ 運算子 |
限制 |
---|---|
join |
代表內部或外部聯結。 僅支援左外部聯結。 |
from |
對每個查詢支援一個 from 子句。 |
where |
子句的左邊必須是屬性名稱,而子句的右邊必須是值。 您無法將左邊設定為常數。 子句的兩邊都不可以是常數。 支援 String 函式 Contains、StartsWith、EndsWith 和 Equals。 |
groupBy |
不支援。 FetchXML 支援的群組選項無法在 LINQ 查詢提供者中使用。其他資訊: 使用 FetchXML 彙總 |
orderBy |
支援依實體屬性排序,例如 Contact.FullName。 |
select |
支援匿名類型、建構函式和初始設定式。 |
last |
不支援 last 運算子。 |
skip 和 take |
支援使用伺服器端分頁的 skip 和 take。skip 值必須大於或等於 take 值。 |
aggregate |
不支援。 FetchXML 支援的彙總選項無法在 LINQ 查詢提供者中使用。其他資訊: 使用 FetchXML 彙總 |
篩選多個實體
您可以在 Microsoft Dynamics 365 和 Microsoft Dynamics 365 (線上) 中建立複雜的 .NET Language-Integrated Query (LINQ) 查詢。 使用多個 Join 子句搭配篩選子句就可建立篩選自多個實體的屬性的結果。
下列範例將示範如何建立 LINQ 查詢,使用兩個實體並依據每個實體的值篩選。
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
另請參閱
範例:建立 LINQ 查詢
範例:複雜 LINQ 查詢
建立與 LINQ (.NET Language Integrated Query) 的查詢
在 LINQ 查詢中使用晚期繫結實體類別
部落格:CodePlex 上有適用於 Dynamics CRM REST/Web API 的 LINQPad 4 驅動程式
Microsoft Dynamics 365
© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權