zoukankan      html  css  js  c++  java
  • crm使用FetchXml聚合查询

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

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

        /// <summary>
        /// 使用FetchXml聚合查询
        /// </summary>
        public class FetchXmlDemo
        {
            /* 特别提示:FetchXML 包含使您可以计算总和、平均值、最小值、最大值和计数的分组和聚合函数。
             * 在查询中仅仅能指定一个 aggregate 属性,并且不能使用 distinct keyword。要创建的聚合的属性。
             * 请设置keywordaggregate到true,然后指定有效的实体名称。 属性名称,和别名 (变量名)。
             * 同一时候必须指定要运行的聚合的类型。 
             */


            /// <summary>
            /// 总和
            /// sql: select sum(new_value) as 'new_value_sum' from account
            /// </summary>
            public void Sum(IOrganizationService service)
            {
                string fetchXml = @"<fetch distinct='false' mapping='logical' aggregate='true'>
                                        <entity name='account'>
                                            <attribute name='new_value' alias='new_value_sum' aggregate='sum' />
                                        </entity>
                                    </fetch>";
                EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
                if (ec != null && ec.Entities.Count > 0)
                {
                   Entity en = ec.Entities[0];
                   //获取结果
                   decimal value = ((Money)((AliasedValue)en["new_value_sum"]).Value).Value;
                }
            }

            /// <summary>
            /// 平均值
            /// sql: select avg(new_value) as 'new_value_avg' from account
            /// 当crm计算数据的平均值时,不考虑 Null 值。

    可是。会使用零 (0)。
            /// </summary>
            public void Avg(IOrganizationService service)
            {
                string fetchXml = @"<fetch distinct='false' mapping='logical' aggregate='true'>
                                        <entity name='account'>
                                            <attribute name='new_value' alias='new_value_avg' aggregate='avg' />
                                        </entity>
                                    </fetch>";
                EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
                if (ec != null && ec.Entities.Count > 0)
                {
                    Entity en = ec.Entities[0];
                    //获取结果
                    decimal value = ((Money)((AliasedValue)en["new_value_avg"]).Value).Value;
                }
            }

            /// <summary>
            /// 计算有多少个记录
            /// sql: select count(*) from account
            /// </summary>
            public void Count(IOrganizationService service)
            {
                string fetchXml = @"<fetch distinct='false' mapping='logical' aggregate='true'>
                                        <entity name='account'>
                                            <attribute name='new_name' alias='new_name_count' aggregate='count' />
                                        </entity>
                                    </fetch>";
                EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
                if (ec != null && ec.Entities.Count > 0)
                {
                    Entity en = ec.Entities[0];
                    //获取结果
                    int value = (Int32)((AliasedValue)en["new_name_count"]).Value;
                }
            }

            /// <summary>
            /// 计算有多少个记录(针对指定的列名)
            /// sql: select count(distinct new_name) from account
            /// </summary>
            public void CountColumn(IOrganizationService service)
            {
                string fetchXml = @"<fetch distinct='false' mapping='logical' aggregate='true'>
                                        <entity name='account'>
                                            <attribute name='new_name' alias='new_name_count' aggregate='countcolumn' distinct='true' />
                                        </entity>
                                    </fetch>";
                EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
                if (ec != null && ec.Entities.Count > 0)
                {
                    Entity en = ec.Entities[0];
                    //获取结果
                    int value = (Int32)((AliasedValue)en["new_name_count"]).Value;
                }
            }

            /// <summary>
            /// 最大值
            /// sql: select max(new_value) as 'new_value_max' from account
            /// 当crm计算数据的最大值时,不考虑 Null 值。可是,会使用零 (0)。
            /// </summary>
            public void Max(IOrganizationService service)
            {
                string fetchXml = @"<fetch distinct='false' mapping='logical' aggregate='true'>
                                        <entity name='account'>
                                            <attribute name='new_value' alias='new_value_max' aggregate='max' />
                                        </entity>
                                    </fetch>";
                EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
                if (ec != null && ec.Entities.Count > 0)
                {
                    Entity en = ec.Entities[0];
                    //获取结果
                    decimal value = ((Money)((AliasedValue)en["new_value_max"]).Value).Value;
                }
            }

            /// <summary>
            /// 最小值
            /// sql: select min(new_value) as 'new_value_min' from account
            /// 当crm计算数据的最小值时,不考虑 Null 值。可是。会使用零 (0)。
            /// </summary>
            public void Min(IOrganizationService service)
            {
                string fetchXml = @"<fetch distinct='false' mapping='logical' aggregate='true'>
                                        <entity name='account'>
                                            <attribute name='new_value' alias='new_value_min' aggregate='min' />
                                        </entity>
                                    </fetch>";
                EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
                if (ec != null && ec.Entities.Count > 0)
                {
                    Entity en = ec.Entities[0];
                    //获取结果
                    decimal value = ((Money)((AliasedValue)en["new_value_min"]).Value).Value;
                }
            }

            /// <summary>
            /// 多个聚合
            /// sql: select count(*) as 'new_value_count',max(new_value) as 'new_value_max',
            ///       min(new_value) as 'new_value_min' from account
            /// </summary>
            public void CountAndMaxAndMin(IOrganizationService service)
            {
                string fetchXml = @"<fetch distinct='false' mapping='logical' aggregate='true'>
                                        <entity name='account'>
                                            <attribute name='new_value' alias='new_value_count' aggregate='count' />
                                            <attribute name='new_value' alias='new_value_max' aggregate='max' />
                                            <attribute name='new_value' alias='new_value_min' aggregate='min' />
                                        </entity>
                                    </fetch>";
                EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchXml));
                if (ec != null && ec.Entities.Count > 0)
                {
                    Entity en = ec.Entities[0];
                    //获取结果
                    int count_value = (Int32)((AliasedValue)en["new_value_count"]).Value;
                    decimal max_value = ((Money)((AliasedValue)en["new_value_max"]).Value).Value;
                    decimal min_value = ((Money)((AliasedValue)en["new_value_min"]).Value).Value;
                }
            }
        }
    }

  • 相关阅读:
    OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5150228.html
Copyright © 2011-2022 走看看