Dynamics CRM - 在 C# Plugin 中使用 QueryExpression (分页以及联表查询)

      在 C# Plugin 中,可以使用 Query Expression 來做數據查詢,由於用 Linq 來查詢時,在數據量比較大的時候,ToList() 会导致内存问题,在此我推薦使用 QueryExpression。以下為代碼示例:

 1 QueryExpression q = new QueryExpression("account");
 2 q.ColumnSet = new ColumnSet(true);//要查詢的主表字段, true 代表全部,也可以逐個錄入字段
 3 q.Criteria.AddCondition("name", ConditionOperator.NotNull);
 4 
 5 //聯表查詢
 6 LinkEntity linkToContact = new LinkEntity();
 7 linkToContact.LinkFromEntityName = Account.EntityLogicalName;//主表
 8 linkToContact.LinkFromAttributeName = "accountid";
 9 linkToContact.LinkToEntityName = Contact.EntityLogicalName;//子表
10 linkToContact.LinkToAttributeName = "cus_account_no";
11 linkToContact.Columns = new ColumnSet("cus_remark");//要查詢的子表字段
12 //寫法2
13 //linkToContact .Columns.AddColumn("cus_remark");
14 linkToContact.EntityAlias = "temp";//給子表設置別名
15 linkToContact.LinkCriteria.AddCondition("statecode", ConditionOperator.Equal, 0);
16 linkToContact.JoinOperator = JoinOperator.Inner;
17 //也可添加排序,低版本sdk可能無法使用
18 linkToContact.Orders.Add(new OrderExpression("cus_record_no", OrderType.Descending));
19 
20 //分頁設置
21 PagingInfo pageInfo= new PagingInfo();
22 pageInfo.Count = 5000;//最大值每頁5000條記錄
23 pageInfo.PageNumber = 1;
24 pageInfo.PagingCookie = null;
25 
26 q.PageInfo = pageInfo;
27 while (true)
28 {
29     var resultList = service.RetrieveMultiple(q);
30     foreach (var item in resultList.Entities)
31     {
32         //do something
33         //讀取主表數據
34         string donorNo = item["cus_donor_no"].ToString();
35         //讀取子表數據
36         string remark = ((AliasedValue)item["temp.cus_remark"]).Value.ToString();
37     }
38 
39     if (resultList.MoreRecords)//如果後續還存在記錄,則查詢下一頁,否則結束查詢
40     {
41         q.PageInfo.PageNumber++;
42         q.PageInfo.PagingCookie = resultList.PagingCookie;
43     }
44     else
45         break;
46 }

 

posted @ 2021-09-18 11:58  三月七真可爱  阅读(490)  评论(0编辑  收藏  举报