Dynamics CRM

      在 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 }
原文地址:https://www.cnblogs.com/Sunny20181123/p/15308147.html