public void can_get_invocation_name_from_class()
        {
            var result = ExpressionTools.GetInvocation <SampleClass>(i => i.PlainMethod());

            Assert.AreEqual("PlainMethod", result.MethodName);
            Assert.AreEqual(0, result.ParameterValues.Length);
        }
            internal OperationInfo(MethodInfo method, object serviceInstance = null)
            {
                OperationName      = method.GetCSharpSignature();
                MethodName         = method.Name;
                HasResult          = method.ReturnType.Name != "Void";
                Parameters         = method.GetParameters();
                OperationAttribute = (PlatformOperationAttribute)method.GetCustomAttribute(typeof(PlatformOperationAttribute), true);
                IsAsyncTask        = method.ReturnType.IsTask();

                if (method.IsStatic)
                {
                    if (HasResult)
                    {
                        DelegateWithResult = ExpressionTools.CreateLazyStaticMethodWithResult(method);
                    }
                    else
                    {
                        Delegate = ExpressionTools.CreateLazyStaticMethodWithNoResult(method);
                    }
                }
                else
                {
                    if (HasResult)
                    {
                        DelegateWithResult = ExpressionTools.CreateLazyMethodWithResult(serviceInstance, method);
                    }
                    else
                    {
                        Delegate = ExpressionTools.CreateLazyMethodWithNoResult(serviceInstance, method);
                    }
                }
            }
        public void can_get_invocation_name_and_parameters_from_returning_functions_on_interfaces()
        {
            var result = ExpressionTools.GetInvocation <ISampleInterface>(i => i.Returns(1));

            Assert.AreEqual("Returns", result.MethodName);
            Assert.AreEqual(1, result.ParameterValues[0]);
        }
Example #4
0
        private static Group groupFunctions(Depends.DAG graph, Dictionary<AST.Address, string> formulas)
        {
            var functions = new Functions();
            var variables = new Variables();
            var provenance = new Provenance();

            // group formulas and invocations by resultant
            foreach (var f in formulas)
            {
                var addr = f.Key;

                // return all references
                var refs = ExpressionTools.transitiveRefs(addr, graph);

                // compute resultant
                var res = Vector.run(addr, graph);

                // save each 'function'
                if (!functions.ContainsKey(res))
                {
                    functions.Add(res, new List<ExpressionTools.Vector[]>());
                }
                functions[res].Add(refs);

                // assign a fresh variable to each unique reference
                if (!variables.ContainsKey(res))
                {
                    // never seen this function before
                    var vm = new VariableMaker();
                    variables.Add(res, new Dictionary<Countable, string>());

                    // we only want unique path resultants for data
                    var resultants =
                        refs
                            .Where(r => !graph.isFormula(r.Head))
                            .Select(r => ExceLint.Vector.RelativeVector(r.Head, r.Tail, graph))
                            .Distinct();

                    // assign variable
                    foreach (var r in resultants)
                    {
                        if (!variables[res].ContainsKey(r))
                        {
                            variables[res].Add(r, vm.nextVariable());
                        }
                    }
                }

                // track provenance
                if (!provenance.ContainsKey(res))
                {
                    var ps = new List<AST.Address>();
                    provenance.Add(res, ps);
                }
                provenance[res].Add(addr);
            }

            return new Group(functions, variables, provenance);
        }
Example #5
0
        private static ExpressionTools.EData inlineExpression(AST.Address addr, Depends.DAG graph, MemoDBOpt memodb)
        {
            // get top-level AST
            var ast = graph.getASTofFormulaAt(addr);

            // merge subtrees
            return ExpressionTools.flattenExpression(ast, graph, memodb);
        }
Example #6
0
    public void Verify <TDelegate>(Expression <Func <KnownType, TDelegate> > methodExpression)
    {
        var tools      = new ExpressionTools();
        var moduleName = tools.GetLastInstanceName(methodExpression);
        var methodName = tools.GetMethodName(methodExpression);

        // My logic.
    }
        public void can_get_invocation_name_and_parameters_from_class()
        {
            var result = ExpressionTools.GetInvocation <SampleClass>(
                i => i.ComplexMethod(1, "two", _three)
                );

            Assert.AreEqual("ComplexMethod", result.MethodName);
            Assert.AreEqual(1, result.ParameterValues[0]);
            Assert.AreEqual("two", result.ParameterValues[1]);
            Assert.AreEqual(_three, result.ParameterValues[2]);
        }
        public void variable_values_are_returned_as_at_call_time()
        {
            // ReSharper disable AccessToModifiedClosure
            var v      = 1;
            var result = ExpressionTools.GetInvocation <ISampleInterface>(i => i.Returns(v));

            v = 2;
            // ReSharper restore AccessToModifiedClosure

            Assert.AreEqual("Returns", result.MethodName);
            Assert.AreEqual(1, result.ParameterValues[0]);
            Assert.AreNotEqual(v, result.ParameterValues[0]);
        }
        public JsonResult GetStudentByCondition(int page, int pageSize, string sortName, List <PropModel> searchs)
        {
            AjaxMessage ajax = new AjaxMessage();

            ajax.IsSuccess = false;
            ajax.Message   = "查询失败,系统异常";
            try
            {
                int count = 0;
                //lamada表达式 条件数组
                List <Expression <Func <StudentDTO, bool> > > parmList = new List <Expression <Func <StudentDTO, bool> > >();


                if (searchs.Count() > 0)
                {
                    foreach (PropModel item in searchs)
                    {
                        if (!string.IsNullOrEmpty(item.value) && item.value != ",")
                        {
                            ExpressionTools.GetEqualPars(item.property, parmList, item.value, item.method);
                        }
                    }
                }

                var list     = stuService.GetConditionStu(page, pageSize, sortName, parmList, ref count);
                var DataList = new PagedList <StudentDTO>(list, page, pageSize, count);

                ajax.data      = DataList;
                ajax.total     = count;     //数据总条数
                ajax.PageIndex = page;      //当前页
                ajax.PageSize  = pageSize;  //每页显示条数

                ajax.IsSuccess = true;
                ajax.Message   = "查询成功";
            }
            catch (Exception e)
            {
                ajax.Message = e.Message;
            }

            //return ajax;
            return(Json(new
            {
                data = ajax.data,
                total = ajax.total,    //数据总条数
                PageIndex = page,      //当前页
                PageSize = pageSize,   //每页显示条数
                TotalPage = ajax.TotalPage
            }));
        }
Example #10
0
        void RefreshMmf()
        {
            while (true)
            {
                Thread.Sleep(5);
                try
                {
                    if (_rawFormat?.ToString() != _fileFormat)
                    {
                        _rawFormat = new StringBuilder(_fileFormat ?? "");
                    }
                    Regex           varPattern  = new Regex(@"\$\{[^,\{\}]*(:[\w\.]*)?\}"); //
                    Regex           boolPattern = new Regex(@"\$if\{[^\{\}]*[\w><=!&\|\+\-\*/\(\)]*,[^{}]*,[^{}]*\}");
                    MatchCollection varMatches  = varPattern.Matches(_rawFormat.ToString());
                    MatchCollection boolMatches = boolPattern.Matches(_rawFormat.ToString());
                    if (varMatches.Count > 0)
                    {
                        foreach (Match match in varMatches)
                        {
                            try
                            {
                                _matchedValue = match.Value;
                                VariableExpression expression = new VariableExpression(_matchedValue, _ortdpWrapper);

                                _replaceStr = ExpressionTools.CalcRpnExpression(
                                    ExpressionTools.ConvertToRpnExpression(expression.NoFormatExpression), _ortdpWrapper);
                                if (expression.HasFormat)
                                {
                                    if (double.TryParse(_replaceStr, out double val))
                                    {
                                        _replaceStr = val.ToString(expression.Format);
                                    }
                                }
                                if (_rawFormat.ToString().Contains("\n") || _rawFormat.ToString().Contains("\r"))
                                {
                                    _rawFormat.Replace("\n", "\n");
                                    _rawFormat.Replace("\r", "\r");
                                }

                                _rawFormat.Replace(match.Value, _replaceStr);
                            }
                            catch (NullReferenceException)
                            {
                            }
                            catch (FormatException)
                            {
                                _rawFormat.Append("Invalid Format");
                            }
                            catch (ArgumentOutOfRangeException)
                            {
                            }

                            _rawFormat.Append("\0\0");
                        }
                    }

                    if (boolMatches.Count > 0)
                    {
                        foreach (Match match in boolMatches)
                        {
                            try
                            {
                                _matchedValue = match.Value;
                                IfExpression expression = new IfExpression(_matchedValue, _ortdpWrapper);
                                _replaceStr = expression.GetProcessedValue().ToString();
                                if (_rawFormat.ToString().Contains("\n") || _rawFormat.ToString().Contains("\r"))
                                {
                                    _rawFormat.Replace("\n", "\n");
                                    _rawFormat.Replace("\r", "\r");
                                }

                                _rawFormat.Replace(match.Value, _replaceStr);
                            }
                            catch (NullReferenceException)
                            {
                                _rawFormat.Append("");
                            }

                            _rawFormat.Append("\0\0");
                        }
                    }
                }
                catch (Exception x)
                {
                    System.IO.File.AppendAllText("Ex.txt", x.ToString());
                }

                byte[] bytes = Encoding.GetEncoding(Setting.Encoding).GetBytes(_rawFormat.ToString() + "\0\0");
                _outputMapStream = _outputInfoMap.CreateViewStream();
                _outputMapStream.Write(bytes, 0, bytes.Length);
            }
        }
Example #11
0
        public static string GetStringFromNodeType(Expression body, string tableName)
        {
            NameValueObject pair = null;

            if (ExpressionTools.GetNodeGroup(body) == NodeGroupTypes.Comparison)
            {
                pair = ExpressionTools.GetPairFromComparison((BinaryExpression)body, tableName);
            }
            else if (ExpressionTools.GetNodeGroup(body) == NodeGroupTypes.Method)
            {
                pair = GetPairFromMethod(body, tableName);
            }

            switch (body.NodeType)
            {
            case ExpressionType.Add:
                break;

            case ExpressionType.AddChecked:
                break;

            case ExpressionType.And:
                break;

            case ExpressionType.AndAlso:
                return(" AND ");

            case ExpressionType.ArrayLength:
                break;

            case ExpressionType.ArrayIndex:
                break;

            case ExpressionType.Call:
                return($"{tableName}.{pair.Name} {GetSqlTranslationFromMethodName((MethodCallExpression)body, pair.Value)}");

            case ExpressionType.Coalesce:
                break;

            case ExpressionType.Conditional:
                break;

            case ExpressionType.Constant:
                break;

            case ExpressionType.Convert:
                break;

            case ExpressionType.ConvertChecked:
                break;

            case ExpressionType.Divide:
                break;

            case ExpressionType.Equal:
                return(string.Format("{0} {1}", pair.Name, pair.Value == null ? "is null" : $" = {pair.Value}"));

            case ExpressionType.ExclusiveOr:
                break;

            case ExpressionType.GreaterThan:
                return(string.Format("{0} > {1}", pair.Name, pair.Value ?? "null"));

            case ExpressionType.GreaterThanOrEqual:
                return(string.Format("{0} >= {1}", pair.Name, pair.Value ?? "null"));

            case ExpressionType.Invoke:
                break;

            case ExpressionType.Lambda:
                break;

            case ExpressionType.LeftShift:
                break;

            case ExpressionType.LessThan:
                return(string.Format("{0} < {1}", pair.Name, pair.Value ?? "null"));

            case ExpressionType.LessThanOrEqual:
                return(string.Format("{0} <= {1}", pair.Name, pair.Value ?? "null"));

            case ExpressionType.ListInit:
                break;

            case ExpressionType.MemberAccess:
                break;

            case ExpressionType.MemberInit:
                break;

            case ExpressionType.Modulo:
                break;

            case ExpressionType.Multiply:
                break;

            case ExpressionType.MultiplyChecked:
                break;

            case ExpressionType.Negate:
                break;

            case ExpressionType.UnaryPlus:
                break;

            case ExpressionType.NegateChecked:
                break;

            case ExpressionType.New:
                break;

            case ExpressionType.NewArrayInit:
                break;

            case ExpressionType.NewArrayBounds:
                break;

            case ExpressionType.Not:
                break;

            case ExpressionType.NotEqual:
                return(string.Format("{0} {1}", pair.Name, pair.Value == null ? "is not null" : $" != {pair.Value }"));

            case ExpressionType.Or:
                break;

            case ExpressionType.OrElse:
                return(" OR ");

            case ExpressionType.Parameter:
                break;

            case ExpressionType.Power:
                break;

            case ExpressionType.Quote:
                break;

            case ExpressionType.RightShift:
                break;

            case ExpressionType.Subtract:
                break;

            case ExpressionType.SubtractChecked:
                break;

            case ExpressionType.TypeAs:
                break;

            case ExpressionType.TypeIs:
                break;

            case ExpressionType.Assign:
                break;

            case ExpressionType.Block:
                break;

            case ExpressionType.DebugInfo:
                break;

            case ExpressionType.Decrement:
                break;

            case ExpressionType.Dynamic:
                break;

            case ExpressionType.Default:
                break;

            case ExpressionType.Extension:
                break;

            case ExpressionType.Goto:
                break;

            case ExpressionType.Increment:
                break;

            case ExpressionType.Index:
                break;

            case ExpressionType.Label:
                break;

            case ExpressionType.RuntimeVariables:
                break;

            case ExpressionType.Loop:
                break;

            case ExpressionType.Switch:
                break;

            case ExpressionType.Throw:
                break;

            case ExpressionType.Try:
                break;

            case ExpressionType.Unbox:
                break;

            case ExpressionType.AddAssign:
                break;

            case ExpressionType.AndAssign:
                break;

            case ExpressionType.DivideAssign:
                break;

            case ExpressionType.ExclusiveOrAssign:
                break;

            case ExpressionType.LeftShiftAssign:
                break;

            case ExpressionType.ModuloAssign:
                break;

            case ExpressionType.MultiplyAssign:
                break;

            case ExpressionType.OrAssign:
                break;

            case ExpressionType.PowerAssign:
                break;

            case ExpressionType.RightShiftAssign:
                break;

            case ExpressionType.SubtractAssign:
                break;

            case ExpressionType.AddAssignChecked:
                break;

            case ExpressionType.MultiplyAssignChecked:
                break;

            case ExpressionType.SubtractAssignChecked:
                break;

            case ExpressionType.PreIncrementAssign:
                break;

            case ExpressionType.PreDecrementAssign:
                break;

            case ExpressionType.PostIncrementAssign:
                break;

            case ExpressionType.PostDecrementAssign:
                break;

            case ExpressionType.TypeEqual:
                break;

            case ExpressionType.OnesComplement:
                break;

            case ExpressionType.IsTrue:
                break;

            case ExpressionType.IsFalse:
                break;

            default:
                break;
            }

            return(string.Empty);
        }
Example #12
0
        public static ArgumentNullException ArgumentNullException(Expression <Func <object?> > propertySelector, string?message = null)
        {
            var propertyName = ExpressionTools.GetReturnName(propertySelector);

            return(new ArgumentNullException(propertyName, message));
        }
Example #13
0
        public AjaxMessage GetOrderCustomer(int page, int pagesize, string sortName, PropModel[] searchs, string orderEmployee)
        {
            AjaxMessage ajax = new AjaxMessage();

            ajax.IsSuccess = false;
            try
            {
                List <Expression <Func <OrderDto, bool> > > parmList = new List <Expression <Func <OrderDto, bool> > >();

                if (!string.IsNullOrEmpty(orderEmployee))
                {
                    parmList.Add(c => c.EmployeeId.ToString() == orderEmployee);

                    string employeeId = orderEmployee.ToInt32() > 0 ? orderEmployee : LoginInfo.UserInfo.EmployeeId.ToString();
                    //选择只显示选择人个人的邀约信息
                    bool isLookLowLevel = orderEmployee.ToInt32() > 0 ? false : true;
                    ExpressionTools.GetParsByCondition <OrderDto>("EmployeeId", parmList, employeeId, "Contains", true, isLookLowLevel);
                }
                else
                {
                    //默认获取本人及下级邀约信息
                    MyEmployee sel_emp = new MyEmployee();
                    sel_emp.GetMyEmployee <OrderDto>("EmployeeId", parmList, true);
                }

                if (searchs.Count() > 0)
                {
                    foreach (PropModel item in searchs)
                    {
                        if (item.value != "-1")          //有明确的某个状态
                        {
                            if (!string.IsNullOrEmpty(item.value))
                            {
                                if (!(item.value.Contains(',')))
                                {
                                    ExpressionTools.GetEqualPars(item.property, parmList, item.value, item.method);
                                }
                                else if (item.value.Contains(','))      //时间 婚期
                                {
                                    TimeHelper.GetPartyDateTime(item.value.ToString(), out start, out end);
                                    parmList.Add(c => c.PartyDate >= start && c.PartyDate <= end);
                                }
                            }
                        }
                        else            //二选一/多选一/确认到店
                        {
                            parmList.Add(c => ("5,6,7,8").Contains(c.OrderState.ToString()));
                        }
                    }
                }
                int count = 0;

                var dataList = _orderService.GetAllByPages(page, pagesize, parmList, sortName, out count);
                if (dataList.Count > 0)
                {
                    ajax.IsSuccess = true;

                    ajax.data      = dataList;
                    ajax.total     = count;                                    //数据总条数
                    ajax.PageIndex = page;                                     //当前页
                    ajax.PageSize  = pagesize;                                 //每页显示条数
                    ajax.EmpId     = LoginInfo.UserInfo.EmployeeId.ToString(); //登录员工
                }
            }
            catch (Exception e)
            {
                ajax.Message = e.Message;
            }

            return(ajax);
        }
Example #14
0
        public AjaxMessage GetInviteCustomer(int page, int pageSize, string sortName, PropModel[] searchs, string inviteEmployee)
        {
            AjaxMessage ajax = new AjaxMessage();

            ajax.IsSuccess = false;
            ajax.Message   = "查询失败,系统异常";
            try
            {
                int count = 0;
                List <Expression <Func <InviteDto, bool> > > parmList = new List <Expression <Func <InviteDto, bool> > >();

                #region 条件
                //默认显示当前登录人以及下级的邀约的信息
                if (!string.IsNullOrEmpty(inviteEmployee))
                {
                    string employeeId = inviteEmployee.ToInt32() > 0 ? inviteEmployee : LoginInfo.UserInfo.EmployeeId.ToString();
                    //选择只显示选择人个人的邀约信息
                    bool isLookLowLevel = inviteEmployee.ToInt32() > 0 ? false : true;
                    ExpressionTools.GetParsByCondition <InviteDto>("InviteEmployee", parmList, employeeId, "Contains", true, isLookLowLevel);
                }
                else
                {
                    //默认获取本人及下级邀约信息
                    MyEmployee sel_emp = new MyEmployee();
                    sel_emp.GetMyEmployee <InviteDto>("InviteEmployee", parmList, true);
                }

                if (searchs.Count() > 0)
                {
                    foreach (PropModel item in searchs)
                    {
                        if (item.value != "-1")          //有明确的某个状态
                        {
                            if (!string.IsNullOrEmpty(item.value))
                            {
                                if (!(item.value.Contains(',')))
                                {
                                    ExpressionTools.GetEqualPars(item.property, parmList, item.value, item.method);
                                }
                                else if (item.value.Contains(','))      //时间 婚期
                                {
                                    TimeHelper.GetPartyDateTime(item.value.ToString(), out start, out end);
                                    parmList.Add(c => c.PartyDate >= start && c.PartyDate <= end);
                                }
                            }
                        }
                        else            //邀约/未邀约/邀约成功/确认到店
                        {
                            parmList.Add(c => ("1,2,3,5").Contains(c.State.ToString()));
                        }
                    }
                }


                #endregion

                var DataList = _inviteService.GetAllByPage(page, pageSize, parmList, sortName, out count);
                ajax.data      = DataList;
                ajax.total     = count;                                    //数据总条数
                ajax.PageIndex = page;                                     //当前页
                ajax.PageSize  = pageSize;                                 //每页显示条数
                ajax.EmpId     = LoginInfo.UserInfo.EmployeeId.ToString(); //登录员工

                ajax.IsSuccess = true;
            }
            catch (Exception e)
            {
                ajax.Message = e.Message;
            }

            return(ajax);
        }
Example #15
0
        private Result <T> ExecuteSelect <T>(Expression <Func <T, bool> > expression, QueryOptions queryOptions, TransactionTypes transactionType) where T : Cope <T>, IManageable, new()
        {
            Result <T> result = new Result <T>(new Dictionary <dynamic, T>(), false, true);

            using (MySqlConnection connection = Connection.OpenMySqlConnection(queryOptions.ConnectionToUse))
            {
                if (connection.State != ConnectionState.Open)
                {
                    throw new BadConnectionStateException();
                }
                string limitQuery  = queryOptions.MaximumResults > -1 ? $"LIMIT {queryOptions.MaximumResults}" : string.Empty;
                string offsetQuery = queryOptions.Offset > 0 ? $"OFFSET {queryOptions.Offset}" : string.Empty;

                _command             = connection.CreateCommand();
                _command.CommandType = CommandType.Text;
                _command.CommandText = $"{GetSelectQuerySection<T>()} {GetFromQuerySection<T>()} WHERE {ExpressionTools.ConvertExpressionToSQL(expression)} ORDER BY {Cope<T>.ModelComposition.DateModifiedProperty.Name} DESC {limitQuery} {offsetQuery}";

                FillDictionaryWithReader(_command.ExecuteReader(), ref result);
            }
            return(result);
        }
Example #16
0
        public virtual async Task <T> FindByIdAsync(TKey id)
        {
            var expr = ExpressionTools.EqualsLambda <T, TKey>(Expression.Parameter(typeof(T), "p"), "Id", id);

            return(await db.Set <T>().SingleOrDefaultAsync(expr));
        }