Dynamics CRM 365 使用 FetchXML 聚合經典例子
阿新 • • 發佈:2022-04-20
計數
1 // Fetch the count of all opportunities. This is the equivalent of 2 // SELECT COUNT(*) AS opportunity_count ... in SQL. 3 string opportunity_count = @" 4 <fetch distinct='false' mapping='logical' aggregate='true'> 5 <entity name='opportunity'> 6 <attribute name='name' alias='opportunity_count' aggregate='count'/>View Code7 </entity> 8 </fetch>"; 9 10 EntityCollection opportunity_count_result = _serviceProxy.RetrieveMultiple(new FetchExpression(opportunity_count)); 11 12 foreach (var c in opportunity_count_result.Entities) 13 { 14 Int32 aggregate2 = (Int32)((AliasedValue)c["opportunity_count"]).Value;15 System.Console.WriteLine("Count of all opportunities: " + aggregate2); 16 17 } 18 System.Console.WriteLine("===============================");
最大值
1 // Fetch the maximum estimatedvalue of all opportunities. This is the equivalent of 2 // SELECT MAX(estimatedvalue) AS estimatedvalue_max ... in SQL.View Code3 string estimatedvalue_max = @" 4 <fetch distinct='false' mapping='logical' aggregate='true'> 5 <entity name='opportunity'> 6 <attribute name='estimatedvalue' alias='estimatedvalue_max' aggregate='max' /> 7 </entity> 8 </fetch>"; 9 10 EntityCollection estimatedvalue_max_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_max)); 11 12 foreach (var c in estimatedvalue_max_result.Entities) 13 { 14 decimal aggregate5 = ((Money)((AliasedValue)c["estimatedvalue_max"]).Value).Value; 15 System.Console.WriteLine("Max estimated value of all opportunities: " + aggregate5); 16 17 } 18 System.Console.WriteLine("===============================");
總和
// Fetch the sum of estimatedvalue for all opportunities. This is the equivalent of // SELECT SUM(estimatedvalue) AS estimatedvalue_sum ... in SQL. string estimatedvalue_sum = @" <fetch distinct='false' mapping='logical' aggregate='true'> <entity name='opportunity'> <attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum' /> </entity> </fetch>"; EntityCollection estimatedvalue_sum_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_sum)); foreach (var c in estimatedvalue_sum_result.Entities) { decimal aggregate7 = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value; System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate7); } System.Console.WriteLine("===============================");View Code
多個聚合
// Fetch multiple aggregate values within a single query. string estimatedvalue_avg2 = @" <fetch distinct='false' mapping='logical' aggregate='true'> <entity name='opportunity'> <attribute name='opportunityid' alias='opportunity_count' aggregate='count'/> <attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/> <attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/> </entity> </fetch>"; EntityCollection estimatedvalue_avg2_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_avg2)); foreach (var c in estimatedvalue_avg2_result.Entities) { Int32 aggregate8a = (Int32)((AliasedValue)c["opportunity_count"]).Value; System.Console.WriteLine("Count of all opportunities: " + aggregate8a); decimal aggregate8b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value; System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate8b); decimal aggregate8c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value; System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate8c); } System.Console.WriteLine("===============================");View Code
分組依據
// Fetch a list of users with a count of all the opportunities they own using groupby. string groupby1 = @" <fetch distinct='false' mapping='logical' aggregate='true'> <entity name='opportunity'> <attribute name='name' alias='opportunity_count' aggregate='countcolumn' /> <attribute name='ownerid' alias='ownerid' groupby='true' /> </entity> </fetch>"; EntityCollection groupby1_result = _serviceProxy.RetrieveMultiple(new FetchExpression(groupby1)); foreach (var c in groupby1_result.Entities) { Int32 aggregate9a = (Int32)((AliasedValue)c["opportunity_count"]).Value; System.Console.WriteLine("Count of all opportunities: " + aggregate9a + "\n"); string aggregate9b = ((EntityReference)((AliasedValue)c["ownerid"]).Value).Name; System.Console.WriteLine("Owner: " + aggregate9b); string aggregate9c = (string)((AliasedValue)c["ownerid_owneridyominame"]).Value; System.Console.WriteLine("Owner: " + aggregate9c); string aggregate9d = (string)((AliasedValue)c["ownerid_owneridyominame"]).Value; System.Console.WriteLine("Owner: " + aggregate9d); } System.Console.WriteLine("===============================");View Code
按連結的實體進行分組
// Fetch the number of opportunities each manager's direct reports // own using a groupby within a link-entity. string groupby2 = @" <fetch distinct='false' mapping='logical' aggregate='true'> <entity name='opportunity'> <attribute name='name' alias='opportunity_count' aggregate='countcolumn' /> <link-entity name='systemuser' from='systemuserid' to='ownerid'> <attribute name='parentsystemuserid' alias='managerid' groupby='true' /> </link-entity> </entity> </fetch>"; EntityCollection groupby2_result = _serviceProxy.RetrieveMultiple(new FetchExpression(groupby2)); foreach (var c in groupby2_result.Entities) { int? aggregate10a = (int?)((AliasedValue)c["opportunity_count"]).Value; System.Console.WriteLine("Count of all opportunities: " + aggregate10a + "\n"); } System.Console.WriteLine("===============================");View Code
按年分組
// Fetch aggregate information about the opportunities that have // been won by year. string byyear = @" <fetch distinct='false' mapping='logical' aggregate='true'> <entity name='opportunity'> <attribute name='opportunityid' alias='opportunity_count' aggregate='count'/> <attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/> <attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/> <attribute name='actualclosedate' groupby='true' dategrouping='year' alias='year' /> <filter type='and'> <condition attribute='statecode' operator='eq' value='Won' /> </filter> </entity> </fetch>"; EntityCollection byyear_result = _serviceProxy.RetrieveMultiple(new FetchExpression(byyear)); foreach (var c in byyear_result.Entities) { Int32 aggregate11 = (Int32)((AliasedValue)c["year"]).Value; System.Console.WriteLine("Year: " + aggregate11); Int32 aggregate11a = (Int32)((AliasedValue)c["opportunity_count"]).Value; System.Console.WriteLine("Count of all opportunities: " + aggregate11a); decimal aggregate11b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value; System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate11b); decimal aggregate11c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value; System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate11c); System.Console.WriteLine("----------------------------------------------"); } System.Console.WriteLine("===============================");View Code
多個分組依據
// Fetch aggregate information about the opportunities that have // been won by year and quarter. string byyrqtr = @" <fetch distinct='false' mapping='logical' aggregate='true'> <entity name='opportunity'> <attribute name='opportunityid' alias='opportunity_count' aggregate='count'/> <attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/> <attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/> <attribute name='actualclosedate' groupby='true' dategrouping='quarter' alias='quarter' /> <attribute name='actualclosedate' groupby='true' dategrouping='year' alias='year' /> <filter type='and'> <condition attribute='statecode' operator='eq' value='Won' /> </filter> </entity> </fetch>"; EntityCollection byyrqtr_result = _serviceProxy.RetrieveMultiple(new FetchExpression(byyrqtr)); foreach (var c in byyrqtr_result.Entities) { Int32 aggregate16d = (Int32)((AliasedValue)c["year"]).Value; System.Console.WriteLine("Year: " + aggregate16d); Int32 aggregate16 = (Int32)((AliasedValue)c["quarter"]).Value; System.Console.WriteLine("Quarter: " + aggregate16); Int32 aggregate16a = (Int32)((AliasedValue)c["opportunity_count"]).Value; System.Console.WriteLine("Count of all opportunities: " + aggregate16a); decimal aggregate16b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value; System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate16b); decimal aggregate16c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value; System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate16c); System.Console.WriteLine("----------------------------------------------"); } System.Console.WriteLine("===============================");View Code
排序依據
// ***************************************************************************************************************** // Specify the result order for the previous sample. Order by year, then quarter. string byyrqtr2 = @" <fetch distinct='false' mapping='logical' aggregate='true'> <entity name='opportunity'> <attribute name='opportunityid' alias='opportunity_count' aggregate='count'/> <attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/> <attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/> <attribute name='actualclosedate' groupby='true' dategrouping='quarter' alias='quarter' /> <attribute name='actualclosedate' groupby='true' dategrouping='year' alias='year' /> <order alias='year' descending='false' /> <order alias='quarter' descending='false' /> <filter type='and'> <condition attribute='statecode' operator='eq' value='Won' /> </filter> </entity> </fetch>"; EntityCollection byyrqtr2_result = _serviceProxy.RetrieveMultiple(new FetchExpression(byyrqtr2)); foreach (var c in byyrqtr2_result.Entities) { Int32 aggregate17 = (Int32)((AliasedValue)c["quarter"]).Value; System.Console.WriteLine("Quarter: " + aggregate17); Int32 aggregate17d = (Int32)((AliasedValue)c["year"]).Value; System.Console.WriteLine("Year: " + aggregate17d); Int32 aggregate17a = (Int32)((AliasedValue)c["opportunity_count"]).Value; System.Console.WriteLine("Count of all opportunities: " + aggregate17a); decimal aggregate17b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value; System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate17b); decimal aggregate17c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value; System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate17c); System.Console.WriteLine("----------------------------------------------"); } System.Console.WriteLine("===============================");View Code