Esempio n. 1
0
        /// <summary>
        /// 根据设定的字段,生成查询重复数据的Lambda,最终返回类似 x=>x.property == val的lambda
        /// </summary>
        /// <param name="Entity">要验证字段的实体类</param>
        /// <param name="para">ParameterExpression</param>
        /// <returns></returns>
        public virtual Expression GetExpression(T Entity, ParameterExpression para)
        {
            var propName = PropertyHelper.GetPropertyName(_directFieldExp);
            var prop     = PropertyHelper.GetPropertyInfo(_directFieldExp);
            var func     = _directFieldExp.Compile();
            var val      = func.Invoke(Entity);

            ////如果字段值为null则跳过,因为一般情况下null值不会被认为重复
            //if (val == null)
            //{
            //    return res;
            //}

            //如果字段值是空字符串,则跳过
            if (val is string && val.ToString() == string.Empty)
            {
                var requiredAttrs = prop.GetCustomAttributes(typeof(RequiredAttribute), false).ToList();

                if (requiredAttrs == null || requiredAttrs.Count == 0)
                {
                    return(null);
                }
                else
                {
                    var requiredAtt = requiredAttrs[0] as RequiredAttribute;
                    if (requiredAtt.AllowEmptyStrings == true)
                    {
                        return(null);
                    }
                }
            }
            //生成一个表达式,类似于 x=>x.field == val
            var splits     = propName.Split('.');
            var idproperty = typeof(T).GetProperties().Where(x => x.Name == splits[0]).FirstOrDefault();

            Expression left = Expression.Property(para, idproperty);

            for (int i = 1; i < splits.Length; i++)
            {
                var tempproperty = typeof(T).GetProperties().Where(x => x.Name == splits[i]).FirstOrDefault();
                left = Expression.Property(left, tempproperty);
            }

            if (val != null && left.Type.IsGeneric(typeof(Nullable <>)))
            {
                left = Expression.Property(left, "Value");
            }
            if (left.Type == typeof(string))
            {
                left = Expression.Call(left, typeof(String).GetMethod("Trim", Type.EmptyTypes));
            }
            if (val is string)
            {
                val = val.ToString().Trim();
            }
            var right = Expression.Constant(val);
            var equal = Expression.Equal(left, right);

            return(equal);
        }
        public static GridAction MakeActionsGroup <T, V>(this IBasePagedListVM <T, V> self
                                                         , string name
                                                         , List <GridAction> subActions
                                                         , params Expression <Func <T, object> >[] whereStr)
            where T : TopBasePoco
            where V : ISearcher
        {
            var iconcls = string.Empty;

            var list = new List <string>();

            foreach (var item in whereStr)
            {
                list.Add(PropertyHelper.GetPropertyName(item));
            }

            return(new GridAction
            {
                ButtonId = Guid.NewGuid().ToString(),
                Name = name,
                DialogTitle = "",
                Area = "",
                ControllerName = "",
                ActionName = "ActionsGroup",
                ParameterType = GridActionParameterTypesEnum.NoId,
                IconCls = iconcls,
                DialogWidth = 0,
                DialogHeight = 0,
                ShowDialog = false,
                whereStr = list.ToArray(),
                SubActions = subActions
            });
        }
Esempio n. 3
0
 public SortInfo CreateSortInfo(Expression<Func<TModel, object>> pro, SortDir dir)
 {
     SortInfo rv = new SortInfo
     {
         Property = PropertyHelper.GetPropertyName(pro),
         Direction = dir
     };
     return rv;
 }
 /// <summary>
 /// 处理所有二进制类型的表达式
 /// </summary>
 /// <param name="node">当前表达式节点</param>
 /// <returns>修改后的表达式</returns>
 protected override Expression VisitBinary(BinaryExpression node)
 {
     //如果表达式是x==y的类型,则获取y的值,并使用x最为key,y的值作为value添加到Dictionary中保存
     if (node.NodeType == ExpressionType.Equal)
     {
         var pi = PropertyHelper.GetPropertyName(node.Left.NodeType == ExpressionType.Convert ? ((UnaryExpression)node.Left).Operand : node.Left);
         if (!_rv.ContainsKey(pi))
         {
             _rv.Add(pi, Expression.Lambda(node.Right).Compile().DynamicInvoke());
         }
     }
     return(base.VisitBinary(node));
 }
 /// <summary>
 /// 查找where中是否出现过对于IsValid的判断
 /// </summary>
 /// <param name="node"></param>
 /// <returns></returns>
 protected override Expression VisitBinary(BinaryExpression node)
 {
     //如果表达式是x==y的类型,则获取y的值,并使用x最为key,y的值作为value添加到Dictionary中保存
     if (_mode == 0)
     {
         if (node.NodeType == ExpressionType.Equal)
         {
             var pi = PropertyHelper.GetPropertyName(node.Left);
             if (pi.ToLower() == "isvalid")
             {
                 _needAdd = false;
             }
         }
     }
     return(base.VisitBinary(node));
 }
Esempio n. 6
0
        /// <summary>
        /// 创建标准动作
        /// </summary>
        /// <typeparam name="T">继承自TopBasePoco的类</typeparam>
        /// <typeparam name="V">继承自ISearcher的类</typeparam>
        /// <param name="self">self</param>
        /// <param name="controllerName">动作的Controller</param>
        /// <param name="actionName">actionName</param>
        /// <param name="name">动作名,默认为‘新建’</param>
        /// <param name="dialogTitle">弹出窗口的标题</param>
        /// <param name="paraType">paraType</param>
        /// <param name="areaName">域名</param>
        /// <param name="dialogWidth">弹出窗口的宽度</param>
        /// <param name="dialogHeight">弹出窗口的高度</param>
        /// <param name="buttonId">Button的id  默认自动生成</param>
        /// <param name="whereStr">whereStr</param>
        /// <returns>列表动作</returns>
        /// <remarks>
        /// 根据标准动作类型,创建默认属性的标准动作
        /// </remarks>
        public static GridAction MakeAction <T, V>(this IBasePagedListVM <T, V> self
                                                   , string controllerName
                                                   , string actionName
                                                   , string name
                                                   , string dialogTitle
                                                   , GridActionParameterTypesEnum paraType
                                                   , string areaName  = null
                                                   , int?dialogWidth  = null
                                                   , int?dialogHeight = null
                                                   , string buttonId  = null
                                                   , params Expression <Func <T, object> >[] whereStr)
            where T : TopBasePoco
            where V : ISearcher
        {
            var iconcls = string.Empty;

            var list = new List <string>();

            foreach (var item in whereStr)
            {
                list.Add(PropertyHelper.GetPropertyName(item));
            }

            return(new GridAction
            {
                ButtonId = buttonId,
                Name = name,
                DialogTitle = dialogTitle,
                Area = areaName,
                ControllerName = controllerName,
                ActionName = actionName,
                ParameterType = paraType,

                IconCls = iconcls,
                DialogWidth = dialogWidth ?? 800,
                DialogHeight = dialogHeight,
                ShowDialog = true,
                whereStr = list.ToArray()
            });
        }
        /// <summary>
        /// 创建标准动作
        /// </summary>
        /// <typeparam name="T">继承自TopBasePoco的类</typeparam>
        /// <typeparam name="V">继承自ISearcher的类</typeparam>
        /// <param name="self">self</param>
        /// <param name="controllerName">动作的Controller</param>
        /// <param name="standardType">标准动作类型</param>
        /// <param name="dialogTitle">弹出窗口的标题</param>
        /// <param name="areaName">域名</param>
        /// <param name="dialogWidth">弹出窗口的宽度</param>
        /// <param name="dialogHeight">弹出窗口的高度</param>
        /// <param name="name">动作名,默认为‘新建’</param>
        /// <param name="buttonId">Button的id  默认自动生成</param>
        /// <param name="whereStr">whereStr</param>
        /// <returns>列表动作</returns>
        /// <remarks>
        /// 根据标准动作类型,创建默认属性的标准动作
        /// </remarks>
        public static GridAction MakeStandardAction <T, V>(this IBasePagedListVM <T, V> self
                                                           , string controllerName
                                                           , GridActionStandardTypesEnum standardType
                                                           , string dialogTitle
                                                           , string areaName     = null
                                                           , int?dialogWidth     = null
                                                           , int?dialogHeight    = null
                                                           , string name         = null
                                                           , string buttonId     = null
                                                           , string queryString  = null
                                                           , string urlParampter = null
                                                           , params Expression <Func <T, object> >[] whereStr)
            where T : TopBasePoco
            where V : ISearcher
        {
            var iconcls       = string.Empty;
            var actionName    = standardType.ToString();
            var gridname      = string.Empty;
            var paraType      = GridActionParameterTypesEnum.NoId;
            var showInRow     = false;
            var hideOnToolBar = false;

            switch (standardType)
            {
            case GridActionStandardTypesEnum.Create:
                iconcls  = "layui-icon-add-1";
                gridname = "新建";
                paraType = GridActionParameterTypesEnum.NoId;
                break;

            case GridActionStandardTypesEnum.AddRow:
                iconcls  = "layui-icon-add-1";
                gridname = "新建";
                paraType = GridActionParameterTypesEnum.AddRow;
                break;

            case GridActionStandardTypesEnum.Edit:
                iconcls       = "layui-icon-edit";
                gridname      = "修改";
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.Delete:
                iconcls       = "layui-icon-delete";
                gridname      = "删除";
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.RemoveRow:
                iconcls       = "layui-icon-delete";
                gridname      = "删除";
                paraType      = GridActionParameterTypesEnum.RemoveRow;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.Details:
                iconcls       = "layui-icon-form";
                gridname      = string.IsNullOrEmpty(name) ? "详细" : name;
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.CustomAction:
                iconcls       = "layui-icon-form";
                gridname      = string.IsNullOrEmpty(name) ? "自定义" : name;
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.BatchEdit:
                iconcls  = "layui-icon-edit";
                gridname = "批量修改";
                paraType = GridActionParameterTypesEnum.MultiIds;
                break;

            case GridActionStandardTypesEnum.BatchDelete:
                iconcls  = "layui-icon-delete";
                gridname = "批量删除";
                paraType = GridActionParameterTypesEnum.MultiIds;
                break;

            case GridActionStandardTypesEnum.Import:
                iconcls  = "layui-icon-templeate-1";
                gridname = "导入";
                paraType = GridActionParameterTypesEnum.NoId;
                break;

            case GridActionStandardTypesEnum.Index:
                iconcls       = "layui-icon-templeate-1";
                gridname      = name == string.Empty?"跳转":name;
                paraType      = GridActionParameterTypesEnum.IndexUrl;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            default:
                break;
            }



            var list = new List <string>();

            foreach (var item in whereStr)
            {
                list.Add(PropertyHelper.GetPropertyName(item));
            }

            return(new GridAction
            {
                ButtonId = buttonId,
                Name = (name ?? gridname),
                DialogTitle = dialogTitle,
                Area = areaName,
                ControllerName = controllerName,
                ActionName = actionName,
                ParameterType = paraType,
                QueryString = queryString,
                UrlParam = urlParampter,
                IconCls = iconcls,
                DialogWidth = dialogWidth ?? 800,
                DialogHeight = dialogHeight,
                ShowInRow = showInRow,
                ShowDialog = true,
                HideOnToolBar = hideOnToolBar,
                whereStr = list.ToArray()
            });
        }
Esempio n. 8
0
        /// <summary>
        /// 创建标准动作
        /// </summary>
        /// <typeparam name="T">继承自TopBasePoco的类</typeparam>
        /// <typeparam name="V">继承自ISearcher的类</typeparam>
        /// <param name="self">self</param>
        /// <param name="controllerName">动作的Controller</param>
        /// <param name="standardType">标准动作类型</param>
        /// <param name="dialogTitle">弹出窗口的标题,可为空,代表使用默认文字</param>
        /// <param name="areaName">域名</param>
        /// <param name="dialogWidth">弹出窗口的宽度</param>
        /// <param name="dialogHeight">弹出窗口的高度</param>
        /// <param name="name">按钮显示的文字</param>
        /// <param name="buttonId">Button的id  默认自动生成</param>
        /// <param name="whereStr">whereStr</param>
        /// <returns>列表动作</returns>
        /// <remarks>
        /// 根据标准动作类型,创建默认属性的标准动作
        /// </remarks>
        public static GridAction MakeStandardAction <T, V>(this IBasePagedListVM <T, V> self
                                                           , string controllerName
                                                           , GridActionStandardTypesEnum standardType
                                                           , string dialogTitle
                                                           , string areaName  = null
                                                           , int?dialogWidth  = null
                                                           , int?dialogHeight = null
                                                           , string name      = null
                                                           , string buttonId  = null
                                                           , params Expression <Func <T, object> >[] whereStr)
            where T : TopBasePoco
            where V : ISearcher
        {
            var iconcls       = string.Empty;
            var actionName    = standardType.ToString();
            var gridname      = string.Empty;
            var paraType      = GridActionParameterTypesEnum.NoId;
            var showInRow     = false;
            var hideOnToolBar = false;
            var showDialog    = true;

            switch (standardType)
            {
            case GridActionStandardTypesEnum.Create:
                iconcls  = "layui-icon layui-icon-add-1";
                gridname = Program._localizer["Create"];
                paraType = GridActionParameterTypesEnum.NoId;
                break;

            case GridActionStandardTypesEnum.AddRow:
                iconcls  = "layui-icon layui-icon-add-1";
                gridname = Program._localizer["Create"];
                paraType = GridActionParameterTypesEnum.AddRow;
                break;

            case GridActionStandardTypesEnum.Edit:
                iconcls       = "layui-icon layui-icon-edit";
                gridname      = Program._localizer["Edit"];
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.Delete:
                iconcls       = "layui-icon layui-icon-delete";
                gridname      = Program._localizer["Delete"];
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.RemoveRow:
                iconcls       = "layui-icon layui-icon-delete";
                gridname      = Program._localizer["Delete"];
                paraType      = GridActionParameterTypesEnum.RemoveRow;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.Details:
                iconcls       = "layui-icon layui-icon-form";
                gridname      = Program._localizer["Details"];
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.BatchEdit:
                iconcls  = "layui-icon layui-icon-edit";
                gridname = Program._localizer["BatchEdit"];
                paraType = GridActionParameterTypesEnum.MultiIds;
                break;

            case GridActionStandardTypesEnum.BatchDelete:
                iconcls  = "layui-icon layui-icon-delete";
                gridname = Program._localizer["BatchDelete"];
                paraType = GridActionParameterTypesEnum.MultiIds;
                break;

            case GridActionStandardTypesEnum.Import:
                iconcls  = "layui-icon layui-icon-templeate-1";
                gridname = Program._localizer["Import"];
                paraType = GridActionParameterTypesEnum.NoId;
                break;

            case GridActionStandardTypesEnum.ExportExcel:
                iconcls       = "layui-icon layui-icon-download-circle";
                gridname      = Program._localizer["Export"];
                paraType      = GridActionParameterTypesEnum.MultiIdWithNull;
                name          = Program._localizer["ExportExcel"];
                showInRow     = false;
                showDialog    = false;
                hideOnToolBar = false;
                break;

            default:
                break;
            }

            if (string.IsNullOrEmpty(dialogTitle))
            {
                dialogTitle = gridname;
            }

            var list = new List <string>();

            foreach (var item in whereStr)
            {
                list.Add(PropertyHelper.GetPropertyName(item));
            }

            return(new GridAction
            {
                ButtonId = buttonId,
                Name = (name ?? gridname),
                DialogTitle = dialogTitle,
                Area = areaName,
                ControllerName = controllerName,
                ActionName = actionName,
                ParameterType = paraType,

                IconCls = iconcls,
                DialogWidth = dialogWidth ?? 800,
                DialogHeight = dialogHeight,
                ShowInRow = showInRow,
                ShowDialog = showDialog,
                HideOnToolBar = hideOnToolBar,
                whereStr = list.ToArray()
            });
        }