Ejemplo n.º 1
0
        private static KeyValuePair <string, object> MemberConvert(MemberExpression expression, object obj)
        {
            Func <MemberExpression, object> valueGetter = exp =>
            {
                var objectMember = Expression.Convert(exp, typeof(object));
                var getterLambda = Expression.Lambda <Func <object> >(objectMember);
                return(getterLambda.Compile()());
            };

            switch (expression.Member.MemberType)
            {
            case MemberTypes.Field:
            {
                return(new KeyValuePair <string, object>(Guid.NewGuid().ToString("N"), valueGetter(expression)));
            }

            case MemberTypes.Property:
            {
                if (expression.Expression.NodeType == ExpressionType.MemberAccess)
                {
                    return(new KeyValuePair <string, object>(Guid.NewGuid().ToString("N"), valueGetter(expression)));
                }
                if (obj != null)
                {
                    var objType = obj.GetType();
                    if (expression.Member.ReflectedType != null && expression.Member.ReflectedType.IsAssignableFrom(objType))
                    {
                        var property = objType.GetProperty(expression.Member.Name);
                        if (property != null)
                        {
                            var value = property.GetValue(obj, null);
                            if (value != null)
                            {
                                return(new KeyValuePair <string, object>(Guid.NewGuid().ToString("N"), value));
                            }
                        }
                    }
                }
                DataConfigureAttribute attribute = DataConfigureAttribute.GetAttribute(expression.Member.ReflectedType);
                string column = attribute != null?attribute.GetPropertyMapper(expression.Member.Name) : expression.Member.Name;

                return(new KeyValuePair <string, object>(column, null));
            }
            }
            return(new KeyValuePair <string, object>());
        }
Ejemplo n.º 2
0
        public DataFilter GetDataFilter <T>()
        {
            DataConfigureAttribute custAttribute = DataConfigureAttribute.GetAttribute <T>();
            DataFilter             filter        = new DataFilter();
            List <Condition>       conditions    = new List <Condition>();
            List <ConditionGroup>  groups        = new List <ConditionGroup>();

            _propertyInfos = typeof(T).GetProperties();
            foreach (var item in _form.AllKeys)
            {
                string property = GetConditionProperty(item);
                if (property.IsNullOrEmpty())
                {
                    continue;
                }

                #region 单个件

                int conditionIndex = GetConditionIndex(item);
                if (conditionIndex >= 0)
                {
                    if (conditionIndex == conditions.Count)
                    {
                        conditions.Add(new Condition());
                    }
                    SetCondition(conditions[conditionIndex], property, _form[item]);
                }

                #endregion

                #region 组合条件

                int groupIndex = GetConditionGroupIndex(item);
                if (groupIndex >= 0)
                {
                    if (groupIndex == groups.Count)
                    {
                        groups.Add(new ConditionGroup());
                    }
                    int groupConditionIndex = GetGroupConditionIndex(item);
                    if (groupConditionIndex >= 0)
                    {
                        if (groupConditionIndex == groups[groupIndex].Conditions.Count)
                        {
                            groups[groupIndex].Conditions.Add(new Condition());
                        }
                        SetCondition(groups[groupIndex].Conditions[groupConditionIndex], property, _form[item]);
                    }
                    else
                    {
                        SetGroup(groups[groupIndex], property, _form[item]);
                    }
                }
                #endregion
            }

            foreach (var con in conditions)
            {
                if (custAttribute != null)
                {
                    con.Property = custAttribute.GetPropertyMapper(con.Property);
                }
                filter.Where(con);
            }

            foreach (var gro in groups)
            {
                if (custAttribute != null)
                {
                    foreach (var con in gro.Conditions)
                    {
                        con.Property = custAttribute.GetPropertyMapper(con.Property);
                    }
                }
                filter.Where(gro);
            }
            for (int i = 0; ; i++)
            {
                string orderp    = _form[string.Format("OrderBy[{0}][OrderCol]", i)];
                string orderType = _form[string.Format("OrderBy[{0}][OrderType]", i)];
                if (string.IsNullOrEmpty(orderp) || string.IsNullOrEmpty(orderType))
                {
                    break;
                }
                Order order = new Order {
                    Property = orderp
                };
                if (custAttribute != null)
                {
                    order.Property = custAttribute.GetPropertyMapper(order.Property);
                }
                order.OrderType = (OrderType)int.Parse(orderType);
                filter.OrderBy(order);
            }
            return(filter);
        }
Ejemplo n.º 3
0
        public DataFilter GetDataFilter <T>()
        {
            DataConfigureAttribute custAttribute = DataConfigureAttribute.GetAttribute <T>();
            DataFilter             filter        = new DataFilter();
            int            conditionIndex        = -1;
            int            groupIndex            = -1;
            int            groupConditionIndex   = -1;
            ConditionGroup Group = new ConditionGroup();

            foreach (var item in _form.AllKeys)
            {
                #region 单件
                int tempIndex = GetConditionIndex(item);
                if (tempIndex >= 0 && conditionIndex != tempIndex)
                {
                    conditionIndex = tempIndex;
                    string value = _form[string.Format("Conditions[{0}][Value]", tempIndex)];
                    if (!string.IsNullOrEmpty(value))
                    {
                        Condition condition = new Condition();
                        condition.Property = _form[string.Format("Conditions[{0}][Property]", tempIndex)];
                        if (custAttribute != null)
                        {
                            condition.Property = custAttribute.GetPropertyMapper(condition.Property);
                        }
                        condition.OperatorType  = (OperatorType)int.Parse(_form[string.Format("Conditions[{0}][OperatorType]", tempIndex)]);
                        condition.ConditionType = (ConditionType)int.Parse(_form[string.Format("Conditions[{0}][ConditionType]", tempIndex)]);
                        condition.Value         = ConvertValue(_form[string.Format("Conditions[{0}][DataType]", tempIndex)], value);
                        filter.Where(condition);
                    }
                }
                #endregion
                #region 条件组合
                int tempGroupIndex = GetConditionGroupIndex(item);
                if (tempGroupIndex >= 0)
                {
                    if (tempGroupIndex != groupIndex && groupIndex != -1)
                    {
                        filter.Where(Group);
                        groupConditionIndex = -1;
                        groupIndex          = -1;
                        Group = new ConditionGroup();
                    }
                    groupIndex = tempGroupIndex;
                    int tempGroupConditionIndex = GetGroupConditionIndex(tempGroupIndex, item);
                    if (tempGroupConditionIndex >= 0 && groupConditionIndex != tempGroupConditionIndex)
                    {
                        groupConditionIndex = tempGroupConditionIndex;
                        string value = _form[string.Format("ConditionGroups[{0}][Conditions][{1}][Value]", tempGroupIndex, tempGroupConditionIndex)];
                        if (!string.IsNullOrEmpty(value))
                        {
                            Condition condition = new Condition();
                            string    proterty  = _form[string.Format("ConditionGroups[{0}][Conditions][{1}][Property]", tempGroupIndex, tempGroupConditionIndex)];
                            condition.Property = proterty;
                            if (custAttribute != null)
                            {
                                condition.Property = custAttribute.GetPropertyMapper(condition.Property);
                            }
                            condition.OperatorType  = (OperatorType)int.Parse(_form[string.Format("ConditionGroups[{0}][Conditions][{1}][OperatorType]", tempGroupIndex, tempGroupConditionIndex)]);
                            condition.ConditionType = (ConditionType)int.Parse(_form[string.Format("ConditionGroups[{0}][Conditions][{1}][ConditionType]", tempGroupIndex, tempGroupConditionIndex)]);
                            condition.Value         = ConvertValue(_form[string.Format("ConditionGroups[{0}][Conditions][{1}][ConditionType]", tempGroupIndex, tempGroupConditionIndex)], value);
                            if (custAttribute != null)
                            {
                                PropertyDataInfo propertyDataInfo = custAttribute.MetaData.PropertyDataConfig[proterty];
                                if (propertyDataInfo.Search != null)
                                {
                                    condition = propertyDataInfo.Search(condition);
                                }
                            }
                            Group.Add(condition);
                        }
                    }
                }
                #endregion
            }
            if (Group.Conditions.Count > 0)
            {
                filter.Where(Group);
            }
            for (int i = 0; ; i++)
            {
                string orderp    = _form[string.Format("OrderBy[{0}][OrderCol]", i)];
                string orderType = _form[string.Format("OrderBy[{0}][OrderType]", i)];
                if (string.IsNullOrEmpty(orderp) || string.IsNullOrEmpty(orderType))
                {
                    break;
                }

                Order order = new Order();
                order.Property = orderp;
                if (custAttribute != null)
                {
                    order.Property = custAttribute.GetPropertyMapper(order.Property);
                }
                order.OrderType = (OrderType)int.Parse(orderType);
                filter.OrderBy(order);
            }

            return(filter);
        }