示例#1
0
        public void ExpressionDictionaryInfoTest()
        {
            ExpressionDictionaryCollection dictionaryInfo = new ExpressionDictionaryCollection();

            dictionaryInfo.InitFromConfiguration(ExpressionDictionarySettings.GetConfig());

            Assert.IsTrue(dictionaryInfo.Count > 0);
            Assert.IsNotNull(dictionaryInfo["Users"]);
            Assert.IsTrue(dictionaryInfo["Users"].Items.Count > 0);

            Assert.AreEqual("Name", dictionaryInfo["Users"].Items["Name"].Name);
            Assert.AreEqual("年龄", dictionaryInfo["Users"].Items["Age"].Description);
            Assert.AreEqual(ExpressionDataType.DateTime, dictionaryInfo["Users"].Items["Birthday"].DataType);
        }
        /// <summary>
        /// 计算表达式字典
        /// </summary>
        /// <param name="strFuncName"></param>
        /// <param name="arrParams"></param>
        /// <param name="calcContext"></param>
        /// <returns></returns>
        private static object CalculateExpressionDictionary(string strFuncName, ParamObjectCollection arrParams, CalculateContext calcContext)
        {
            ExpressionDictionaryCollection dictionaries = (ExpressionDictionaryCollection)ObjectContextCache.Instance.GetOrAddNewValue(
                "ExpressionDictionaries",
                (cache, key) =>
                {
                    ExpressionDictionaryCollection expDicts = new ExpressionDictionaryCollection();

                    expDicts.InitFromConfiguration(ExpressionDictionarySettings.GetConfig());

                    cache.Add("ExpressionDictionaries", expDicts);

                    return expDicts;
                });

            ExpressionDictionary dictionary = dictionaries[strFuncName];

            object oValue = null;

            if (dictionary != null)
            {
                ExpressionDictionaryCalculatorContext context = new ExpressionDictionaryCalculatorContext(dictionary, calcContext.CallerContxt);

                string key = string.Empty;

                if (arrParams.Count > 0 && arrParams[0].Value != null)
                    key = arrParams[0].Value.ToString();

                oValue = dictionary.Calculator.Calculate(strFuncName, key, context);
            }

            return oValue;
        }