コード例 #1
0
        /// <summary>
        /// 批量获取SystemRole实体对象
        /// </summary>
        public static List <SystemRole> GetList(int top, Expression <Func <SystemRole, bool> > predicate = null, params SystemRoleColumn[] orderBy)
        {
            var where_str = string.Empty;

            if (predicate != null)
            {
                var parser = new PredicateParser();
                where_str = parser.Parse(predicate);
            }

            var sql = new StringBuilder();

            sql.Append("SELECT TOP " + top.ToString() + " * FROM [SystemRole]");
            if (where_str != string.Empty)
            {
                sql.Append(" WHERE " + where_str);
            }
            if (orderBy != null && orderBy.Length > 0)
            {
                sql.Append(" ORDER BY " + string.Join(", ", orderBy.Select(p => $"{p.Name} {p.Asc}")));
            }

            List <SystemRole> ret = null;

            using (var conn = GetOpenConnection())
            {
                ret = conn.Query <SystemRole>(sql.ToString()).ToList();
            }

            return(ret);
        }
コード例 #2
0
        public static bool MeetsCondition(PropertyCondition propCondition, IDictionary <string, object> entry)
        {
            var propertyName = propCondition.PropertyName.Dehumanize();
            var condition    = propCondition.Condition;
            var tryParse     = PredicateParser <dynamic> .TryParse(condition);

            if (!tryParse)
            {
                Trace.WriteLine("Failed to Parse Condition on Property (" + propertyName + "):  " + condition);
                return(false);
            }

            var propValue = entry[propertyName];

            Trace.WriteLine("Evaluating Condition (" + condition + ") on Property (" + propertyName + ") with value: " + propValue);
            var expression = PredicateParser <dynamic> .Parse(condition);

            var predicate      = expression.Compile();
            var meetsCondition = predicate(entry);

            if (!meetsCondition)
            {
                Trace.WriteLine("Failed to Meet Condition on Property (" + propertyName + ") with value (" + propValue + "):  " + condition);
            }

            return(meetsCondition);
        }
コード例 #3
0
        /// <summary>
        /// 获取记录总数
        /// </summary>
        public static int GetCount(Expression <Func <SystemRole, bool> > predicate = null)
        {
            var where_str = string.Empty;

            if (predicate != null)
            {
                var parser = new PredicateParser();
                where_str = parser.Parse(predicate);
            }

            var sql = new StringBuilder();

            sql.Append("SELECT COUNT(1) FROM [SystemRole]");
            if (where_str != string.Empty)
            {
                sql.Append(" WHERE " + where_str);
            }

            var ret = -1;

            using (var conn = GetOpenConnection())
            {
                ret = conn.ExecuteScalar <int>(sql.ToString());
            }

            return(ret);
        }
コード例 #4
0
        /// <summary>
        /// 删除指定的SystemRole数据记录
        /// </summary>
        public static bool Delete(Expression <Func <SystemRole, bool> > predicate = null)
        {
            var where_str = string.Empty;

            if (predicate != null)
            {
                var parser = new PredicateParser();
                where_str = parser.Parse(predicate);
            }

            var sql = new StringBuilder();

            sql.Append("DELETE FROM [SystemRole]");
            if (where_str != string.Empty)
            {
                sql.Append(" WHERE " + where_str);
            }
            var ret = false;

            using (var conn = GetOpenConnection())
            {
                ret = conn.Execute(sql.ToString()) > 0;
            }

            return(ret);
        }
コード例 #5
0
        public static bool Evaluate <TSourceObj>(string expression, TSourceObj source)
        {
            var predicate = PredicateParser <TSourceObj> .Parse(expression);

            var compiledPredicate = predicate.Compile();

            Trace.WriteLine("Expression:  " + expression);
            Trace.WriteLine(predicate);
            return(compiledPredicate(source));
        }
コード例 #6
0
    private void CallRecursive(PredicateGroup predicateGroup)
    {
        var  nodes = predicateGroup.Predicates;
        bool isSet = true;

        ++level;

        foreach (var n in nodes)
        {
            if (n is PredicateGroup @group)
            {
                CallRecursive(@group);
                --level;
            }
            else
            {
                var expr = PredicateParser <T> .Parse((IFieldPredicate)n);

                if (level > 0)
                {
                    if (isSet)
                    {
                        higherQuery = t => predicateGroup.Operator == GroupOperator.And;
                        isSet       = false;
                    }

                    higherQuery = predicateGroup.Operator == GroupOperator.And
                                        ? higherQuery.And(expr)
                                        : higherQuery.Or(expr);
                }
                else
                {
                    previousOperator = predicateGroup.Operator;

                    finalQuery = predicateGroup.Operator == GroupOperator.And
                                        ? finalQuery.And(expr)
                                        : finalQuery.Or(expr);
                }
            }
        }

        if (higherQuery != null)
        {
            finalQuery = previousOperator == GroupOperator.And
                                ? finalQuery.And(higherQuery)
                                : finalQuery.Or(higherQuery);
        }

        higherQuery = null;
    }
コード例 #7
0
        /// <summary>
        /// 获取指定的SystemRole实体对象
        /// </summary>
        public static SystemRole GetModel(Expression <Func <SystemRole, bool> > predicate)
        {
            var parser    = new PredicateParser();
            var where_str = parser.Parse(predicate);

            var sql = new StringBuilder();

            sql.Append("SELECT TOP 1 * FROM [SystemRole] ");
            sql.Append(" WHERE " + where_str);
            SystemRole ret = null;

            using (var conn = GetOpenConnection())
            {
                ret = conn.QueryFirstOrDefault <SystemRole>(sql.ToString());
            }

            return(ret);
        }
コード例 #8
0
        /// <summary>
        /// 是否存在指定的SystemRole实体对象
        /// </summary>
        public static bool Exists(Expression <Func <SystemRole, bool> > predicate)
        {
            var parser    = new PredicateParser();
            var where_str = parser.Parse(predicate);

            var sql = new StringBuilder();

            sql.Append("SELECT COUNT(1) FROM [SystemRole]");
            sql.Append(" WHERE " + where_str);
            var ret = false;

            using (var conn = GetOpenConnection())
            {
                ret = conn.ExecuteScalar <int>(sql.ToString()) > 0;
            }

            return(ret);
        }
コード例 #9
0
        public void Parse_CollectionOfCars_ThreeTypeOfCars()
        {
            //Arrange
            var testdata = Car.PrepareTestData();

            var groupPredicate = new PredicateGroup
            {
                Operator   = GroupOperator.Or,
                Predicates = new List <IPredicate>()
            };

            var predicateGroup1 = new PredicateGroup
            {
                Operator   = GroupOperator.And,
                Predicates = new List <IPredicate>()
                {
                    Predicates.Field <Car>(f => f.Name, Operator.Eq, "Fiat"),
                    Predicates.Field <Car>(f => f.Model, Operator.Eq, "Bravo")
                }
            };

            var predicateGroup2 = new PredicateGroup
            {
                Operator   = GroupOperator.And,
                Predicates = new List <IPredicate>()
                {
                    Predicates.Field <Car>(f => f.Cost, Operator.Gt, 20000),
                    Predicates.Field <Car>(f => f.Type, Operator.Eq, "Sedan"),
                }
            };

            groupPredicate.Predicates.Add(Predicates.Field <Car>(f => f.Type, Operator.Eq, "Hatchback"));
            groupPredicate.Predicates.Add(predicateGroup1);
            groupPredicate.Predicates.Add(predicateGroup2);

            //Act
            var expression = PredicateParser <Car> .Parse(groupPredicate).Compile();

            var result = testdata.Where(expression);

            //Assert
            Assert.AreEqual(3, result.Count());
        }
コード例 #10
0
        /// <summary>
        /// 分页获取数据列表
        /// </summary>
        public static PageDataView <SystemRole> GetPage(
            Expression <Func <SystemRole, bool> > predicate,
            int pageSize,
            int currentPage,
            IList <SystemRoleColumn> orderBy,
            params SystemRoleColumn[] columns)
        {
            var where_str = string.Empty;

            if (predicate != null)
            {
                var parser = new PredicateParser();
                where_str = parser.Parse(predicate);
            }

            var orderby_str = string.Empty;

            if (orderBy != null && orderBy.Count > 0)
            {
                orderby_str = string.Join(", ", orderBy.Select(p => $"[{p.Name}] {p.Asc}"));
            }

            var column_str = "*";

            if (columns != null && columns.Length > 0)
            {
                column_str = string.Join(", ", columns.Select(p => $"[{p.Name}]"));
            }

            return(Paged <SystemRole>(
                       "[SystemRole]",
                       where_str,
                       orderby_str,
                       column_str,
                       pageSize,
                       currentPage));
        }
コード例 #11
0
        /// <summary>
        /// 分页获取数据列表
        /// </summary>
        public static PageDataView <RoleAuthMapping> GetPage(
            Expression <Func <RoleAuthMapping, bool> > predicate = null,
            int pageSize    = 20,
            int currentPage = 1,
            RoleAuthMappingColumn orderBy = null,
            params RoleAuthMappingColumn[] columns)
        {
            var where_str = string.Empty;

            if (predicate != null)
            {
                var parser = new PredicateParser();
                where_str = parser.Parse(predicate);
            }

            var orderby_str = string.Empty;

            if (orderBy != null)
            {
                orderby_str = $"[{orderBy.Name}] {orderBy.Asc}";
            }

            var column_str = "*";

            if (columns != null && columns.Length > 0)
            {
                column_str = string.Join(", ", columns.Select(p => $"[{p.Name}]"));
            }

            return(Paged <RoleAuthMapping>(
                       "[RoleAuthMapping]",
                       where_str,
                       orderby_str,
                       column_str,
                       pageSize,
                       currentPage));
        }
コード例 #12
0
        /// <summary>
        /// 更新SystemRole数据记录
        /// </summary>
        /// <param name="model">SystemRole实体对象</param>
        /// <param name="fields">需要更新的字段名字</param>
        /// <param name="reverse">反转给定的更新字段</param>
        /// <returns>是否成功,true为成功</returns>
        public static bool Update(SystemRole model, Expression <Func <SystemRole, bool> > predicate, bool reverse, SqlConnection conn, SqlTransaction transaction, params SystemRoleColumn[] fields)
        {
            var where_str = string.Empty;

            if (predicate != null)
            {
                var parser = new PredicateParser();
                where_str = parser.Parse(predicate);
            }
            else
            {
                where_str = "[Id] = @Id";
            }

            var sql = new StringBuilder();

            sql.Append("UPDATE [SystemRole]");
            if (fields == null || fields.Length == 0)
            {
                sql.Append(" SET [Name] = @Name, [Remark] = @Remark, [CreatedTime] = @CreatedTime");
            }
            else
            {
                if (reverse == true)
                {
                    fields = (SystemRoleColumn[])Columns.All.Except(fields);
                }
                sql.Append(" SET ");
                for (int i = 0; i < fields.Length; i++)
                {
                    if (fields[i].IsAddEqual)
                    {
                        sql.Append("[" + fields[i].Name + "] += @" + fields[i].Name + "");
                        fields[i].SetAddEqual();
                    }
                    else
                    {
                        sql.Append("[" + fields[i].Name + "] = @" + fields[i].Name + "");
                    }

                    if (i != fields.Length - 1)
                    {
                        sql.Append(",");
                    }
                }
            }
            sql.Append(" WHERE " + where_str);
            var ret = false;

            if (conn != null)
            {
                if (transaction == null)
                {
                    throw new ArgumentNullException("transaction");
                }
                ret = conn.Execute(sql.ToString(), model, transaction) > 0;
            }
            else
            {
                using (var conn1 = GetOpenConnection())
                {
                    ret = conn1.Execute(sql.ToString(), model) > 0;
                }
            }

            return(ret);
        }
コード例 #13
0
        /// <summary>
        /// 条件を表す式からSQLを生成します
        /// </summary>
        /// <typeparam name="T">テーブルの型</typeparam>
        /// <param name="targetDatabase">対象となるデータベース</param>
        /// <param name="predicate">条件式</param>
        /// <returns>条件SQL</returns>
        public static This From <T>(DbKind targetDatabase, Expression <Func <T, bool> > predicate)
        {
            //--- 解析実行
            var root = PredicateParser.Parse(predicate);

            //--- SQL文 / パラメーター生成の定義
            uint index          = 0;
            var  columnMap      = TableMappingInfo.Create <T>().Columns.ToDictionary(x => x.PropertyName);
            var  prefix         = targetDatabase.GetBindParameterPrefix();
            var  parameterCount = root.DescendantsAndSelf().Count(x =>
            {
                return(x.Operator != PredicateOperator.AndAlso &&
                       x.Operator != PredicateOperator.OrElse &&
                       x.Value != null);
            });
            var digit       = (parameterCount - 1).ToString().Length;
            var digitFormat = $"D{digit}";
            IDictionary <string, object>    parameter  = new ExpandoObject();
            Func <PredicateElement, string> sqlBuilder = null;

            sqlBuilder = element =>
            {
                if (element.HasChildren)
                {
                    var left  = sqlBuilder(element.Left);
                    var right = sqlBuilder(element.Right);
                    if (element.Operator != element.Left.Operator && element.Left.HasChildren)
                    {
                        left = $"({left})";
                    }
                    if (element.Operator != element.Right.Operator && element.Right.HasChildren)
                    {
                        right = $"({right})";
                    }
                    if (element.Operator == PredicateOperator.AndAlso)
                    {
                        return($"{left} and {right}");
                    }
                    if (element.Operator == PredicateOperator.OrElse)
                    {
                        return($"{left} or {right}");
                    }
                    throw new InvalidOperationException();
                }
                else
                {
                    var builder = new StringBuilder();
                    builder.Append(columnMap[element.PropertyName].ColumnName);
                    switch (element.Operator)
                    {
                    case PredicateOperator.Equal:
                        if (element.Value == null)
                        {
                            builder.Append(" is null");
                            return(builder.ToString());
                        }
                        builder.Append(" = ");
                        break;

                    case PredicateOperator.NotEqual:
                        if (element.Value == null)
                        {
                            builder.Append(" is not null");
                            return(builder.ToString());
                        }
                        builder.Append(" <> ");
                        break;

                    case PredicateOperator.LessThan:            builder.Append(" < ");  break;

                    case PredicateOperator.LessThanOrEqual:     builder.Append(" <= "); break;

                    case PredicateOperator.GreaterThan:         builder.Append(" > ");  break;

                    case PredicateOperator.GreaterThanOrEqual:  builder.Append(" >= "); break;

                    case PredicateOperator.Contains:            builder.Append(" in "); break;

                    default:                                    throw new InvalidOperationException();
                    }

                    var parameterName = $"p{index.ToString(digitFormat)}";
                    ++index;
                    parameter.Add(parameterName, element.Value);  //--- cache parameter
                    builder.Append($"{prefix}{parameterName}");
                    return(builder.ToString());
                }
            };

            //--- 組み立て
            return(new This(sqlBuilder(root), parameter as ExpandoObject));
        }