Ejemplo n.º 1
0
        /// <summary>
        /// run variable wheres
        /// </summary>
        /// <param name="newPoint"></param>
        /// <returns></returns>
        public object Run(object newPoint)
        {
            KeyValuePair <string, object> first = PublicVariables.First();

            PublicVariables[first.Key] = newPoint;
            object result = WhereInfo.Run(newPoint);

            foreach (VariableInfo variableInfo in Children)
            {
                object variableValue = null;
                System.Reflection.PropertyInfo property = null;
                foreach (KeyValuePair <string, object> variable in variableInfo.PublicVariables)
                {
                    if (variableInfo.PublicVariablePropertyNames.TryGetValue(variable.Key, out string name))
                    {
                        string[] nameValue = name.Split('.');
                        if (first.Key.Equals(nameValue[0], StringComparison.OrdinalIgnoreCase))
                        {
                            property = newPoint.GetType().GetProperties().FirstOrDefault(x => x.Name.Equals(nameValue.Last(), System.StringComparison.OrdinalIgnoreCase));
                            if (property != null)
                            {
                                object value = property.GetValue(newPoint);
                                variableValue = value;
                                break;
                            }
                        }
                    }
                }
                if (variableValue is IEnumerable enumerable)
                {
                    Type[] generics = property.PropertyType.GetGenericArguments();
                    if (generics.Length > 0)
                    {
                        var method = typeof(ConditionsCompiler).GetMethods(BindingFlags.NonPublic | BindingFlags.Static).Where(x => x.Name == "GenerateArrayObject" && x.GetGenericArguments().Length > 0).FirstOrDefault();
                        method = method.MakeGenericMethod(generics[0]);
                        var value = method.Invoke(null, new object[] { variableValue, variableInfo });
                        value = typeof(Enumerable).GetMethod("ToList", BindingFlags.Static | BindingFlags.Public).MakeGenericMethod(generics[0]).Invoke(null, new object[] { value });
                        property.SetValue(newPoint, value);
                    }
                    else
                    {
                        var value = ConditionsCompiler.GenerateArrayObject(variableValue, variableInfo);
                        property.SetValue(newPoint, value);
                    }
                }
                else
                {
                    object value = variableInfo.Run(variableValue);
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// add empty sides
        /// </summary>
        /// <returns></returns>
        public IAddConditionSides Add()
        {
            WhereInfo whereInfo = new WhereInfo()
            {
                Parent          = this,
                PublicVariables = PublicVariables
            };

            Operators.Add(new OperatorKey()
            {
                OperatorType = OperatorType.None,
                OperatorInfo = whereInfo
            });
            return(whereInfo);
        }