首页 > 代码库 > crm使用FetchXml分组聚合查询

crm使用FetchXml分组聚合查询

/* 创建者:菜刀居士的博客
 * 创建日期:2014年07月09号
 */

namespace Net.CRM.FetchXml
{
    using System;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Query;

    /// <summary>
    /// 使用FetchXml聚合查询,分组依据
    /// </summary>
    public class FetchXmlExtension
    {
        /// <summary>
        /// 分组聚合
        /// sql: select count(*),ownerid from account group by ownerid
        /// </summary>
        public void Group(IOrganizationService service)
        {
            string fetchXml = @"<fetch distinct=‘false‘ mapping=‘logical‘ aggregate=‘true‘>
                                    <entity name=‘account‘>
                                        <attribute name=‘name‘ alias=‘name_count‘ aggregate=‘count‘ />
                                        <attribute name=‘ownerid‘ alias=‘ownerid‘ groupby=‘true‘ />
                                    </entity>
                                </fetch>";
            EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
            if (ec != null && ec.Entities.Count > 0)
            {
                Entity en = ec.Entities[0];
                //获取结果
                decimal value = http://www.mamicode.com/((Money)((AliasedValue)en["name_count"]).Value).Value;
                EntityReference ownerEr = (EntityReference)((AliasedValue)en["ownerid"]).Value;
            }
        }

        /// <summary>
        /// 分组聚合,按年分组
        /// </summary>
        public void GroupByYear(IOrganizationService service)
        {
            string fetchXml = @"<fetch distinct=‘false‘ mapping=‘logical‘ aggregate=‘true‘>
                                    <entity name=‘account‘>
                                       <attribute name=‘accountid‘ alias=‘account_count‘ aggregate=‘count‘/>
                                       <attribute name=‘estimatedvalue‘ alias=‘estimatedvalue_sum‘ aggregate=‘sum‘/> 
                                       <attribute name=‘actualclosedate‘ groupby=‘true‘ dategrouping=‘year‘ alias=‘year‘ />
                                    </entity>
                                </fetch>";
            EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
            if (ec != null && ec.Entities.Count > 0)
            {
                Entity en = ec.Entities[0];
                //获取结果
                int value_year = (Int32)((AliasedValue)en["year"]).Value;
                int value_count = (Int32)((AliasedValue)en["account_count"]).Value;
                decimal value_sum = ((Money)((AliasedValue)en["estimatedvalue_sum"]).Value).Value;
            }
        }

        /// <summary>
        /// 分组聚合,按季度分组
        /// </summary>
        public void GroupByQuarter(IOrganizationService service)
        {
            string fetchXml = @"<fetch distinct=‘false‘ mapping=‘logical‘ aggregate=‘true‘>
                                    <entity name=‘account‘>
                                       <attribute name=‘accountid‘ alias=‘account_count‘ aggregate=‘count‘/>
                                       <attribute name=‘estimatedvalue‘ alias=‘estimatedvalue_sum‘ aggregate=‘sum‘/> 
                                       <attribute name=‘actualclosedate‘ groupby=‘true‘ dategrouping=‘quarter‘ alias=‘quarter‘ />
                                    </entity>
                                </fetch>";
            EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
            if (ec != null && ec.Entities.Count > 0)
            {
                Entity en = ec.Entities[0];
                //获取结果
                int value_quarter = (Int32)((AliasedValue)en["quarter"]).Value;
                int value_count = (Int32)((AliasedValue)en["account_count"]).Value;
                decimal value_sum = ((Money)((AliasedValue)en["estimatedvalue_sum"]).Value).Value;
            }
        }

        /// <summary>
        /// 分组聚合,按月分组
        /// </summary>
        public void GroupByMonth(IOrganizationService service)
        {
            string fetchXml = @"<fetch distinct=‘false‘ mapping=‘logical‘ aggregate=‘true‘>
                                    <entity name=‘account‘>
                                       <attribute name=‘accountid‘ alias=‘account_count‘ aggregate=‘count‘/>
                                       <attribute name=‘estimatedvalue‘ alias=‘estimatedvalue_sum‘ aggregate=‘sum‘/> 
                                       <attribute name=‘actualclosedate‘ groupby=‘true‘ dategrouping=‘month‘ alias=‘month‘ />
                                    </entity>
                                </fetch>";
            EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
            if (ec != null && ec.Entities.Count > 0)
            {
                Entity en = ec.Entities[0];
                //获取结果
                int value_month = (Int32)((AliasedValue)en["month"]).Value;
                int value_count = (Int32)((AliasedValue)en["account_count"]).Value;
                decimal value_sum = ((Money)((AliasedValue)en["estimatedvalue_sum"]).Value).Value;
            }
        }

        /// <summary>
        /// 分组聚合,按周分组
        /// </summary>
        public void GroupByWeek(IOrganizationService service)
        {
            string fetchXml = @"<fetch distinct=‘false‘ mapping=‘logical‘ aggregate=‘true‘>
                                    <entity name=‘account‘>
                                       <attribute name=‘accountid‘ alias=‘account_count‘ aggregate=‘count‘/>
                                       <attribute name=‘estimatedvalue‘ alias=‘estimatedvalue_sum‘ aggregate=‘sum‘/> 
                                       <attribute name=‘actualclosedate‘ groupby=‘true‘ dategrouping=‘week‘ alias=‘week‘ />
                                    </entity>
                                </fetch>";
            EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
            if (ec != null && ec.Entities.Count > 0)
            {
                Entity en = ec.Entities[0];
                //获取结果
                int value_week = (Int32)((AliasedValue)en["week"]).Value;
                int value_count = (Int32)((AliasedValue)en["account_count"]).Value;
                decimal value_sum = ((Money)((AliasedValue)en["estimatedvalue_sum"]).Value).Value;
            }
        }

        /// <summary>
        /// 分组聚合,按日分组
        /// </summary>
        public void GroupByDay(IOrganizationService service)
        {
            string fetchXml = @"<fetch distinct=‘false‘ mapping=‘logical‘ aggregate=‘true‘>
                                    <entity name=‘account‘>
                                       <attribute name=‘accountid‘ alias=‘account_count‘ aggregate=‘count‘/>
                                       <attribute name=‘estimatedvalue‘ alias=‘estimatedvalue_sum‘ aggregate=‘sum‘/> 
                                       <attribute name=‘actualclosedate‘ groupby=‘true‘ dategrouping=‘day‘ alias=‘day‘ />
                                    </entity>
                                </fetch>";
            EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
            if (ec != null && ec.Entities.Count > 0)
            {
                Entity en = ec.Entities[0];
                //获取结果
                int value_day = (Int32)((AliasedValue)en["day"]).Value;
                int value_count = (Int32)((AliasedValue)en["account_count"]).Value;
                decimal value_sum = ((Money)((AliasedValue)en["estimatedvalue_sum"]).Value).Value;
            }
        }

        /// <summary>
        /// 分组聚合,多个分组依据
        /// </summary>
        public void GroupByYearAndQuarter(IOrganizationService service)
        {
            string fetchXml = @"<fetch distinct=‘false‘ mapping=‘logical‘ aggregate=‘true‘>
                                    <entity name=‘account‘>
                                       <attribute name=‘accountid‘ alias=‘account_count‘ aggregate=‘count‘/>
                                       <attribute name=‘estimatedvalue‘ alias=‘estimatedvalue_sum‘ aggregate=‘sum‘/> 
                                       <attribute name=‘actualclosedate‘ groupby=‘true‘ dategrouping=‘year‘ alias=‘year‘ />
                                       <attribute name=‘actualclosedate‘ groupby=‘true‘ dategrouping=‘quarter‘ alias=‘quarter‘ />
                                    </entity>
                                </fetch>";
            EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
            if (ec != null && ec.Entities.Count > 0)
            {
                Entity en = ec.Entities[0];
                //获取结果
                int value_year = (Int32)((AliasedValue)en["year"]).Value;
                int value_quarter = (Int32)((AliasedValue)en["quarter"]).Value;
                int value_count = (Int32)((AliasedValue)en["account_count"]).Value;
                decimal value_sum = ((Money)((AliasedValue)en["estimatedvalue_sum"]).Value).Value;
            }
        }
    }
}