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]); }
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); }
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); }
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 })); }
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); } }
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); }
public static ArgumentNullException ArgumentNullException(Expression <Func <object?> > propertySelector, string?message = null) { var propertyName = ExpressionTools.GetReturnName(propertySelector); return(new ArgumentNullException(propertyName, message)); }
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); }
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); }
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); }
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)); }