コード例 #1
0
ファイル: SelectClause.cs プロジェクト: jjg0519/DapperEx
        public void Build(Expression expression, AverageFunction ave)
        {
            var resolve = new ExpressionResolve();

            _builder.SelectField = new List <string>();
            resolve.VisitMember(expression).ForEach(x =>
            {
                var field = string.Empty;
                switch (ave)
                {
                case AverageFunction.MAX:
                    field = " MAX({0})";
                    break;

                case AverageFunction.MIN:
                    field = " MIN({0})";
                    break;

                case AverageFunction.SUM:
                    field = " SUM({0})";
                    break;

                case AverageFunction.AVG:
                    field = " AVG({0})";
                    break;
                }

                _builder.SelectField.Add(string.Format(field, _builder.Adapter.Field(_builder.Table, _builder.TableAliasName, x.FieldName, x.SelectFiledAliasName)));
            });
        }
コード例 #2
0
ファイル: SelectClause.cs プロジェクト: jjg0519/DapperEx
        public void Build(Expression expression)
        {
            var resolve = new ExpressionResolve();

            _builder.SelectField = new List <string>();

            _builder.SelectField =
                resolve.VisitMember(expression).Select(x => _builder.Adapter.Field(_builder.Table, _builder.TableAliasName, x.FieldName, x.SelectFiledAliasName))
                .ToList();
        }
コード例 #3
0
        public static Tuple <string, List <SqlParameter> > DeleteSql <T>(this T entity, Expression <Func <T, bool> > func)
        {
            var condition = ExpressionResolve.Resolve(func);
            var et        = typeof(T);
            var tableAttr = et.GetCustomAttributes(typeof(TableNameAttribute), true);
            var tableName = tableAttr.Any() ? (tableAttr[0] as TableNameAttribute).Name : et.Name;
            var sql       = string.Format("DELETE [{0}] WHERE {1}; SELECT @@ROWCOUNT;", tableName.ToUpper(), condition.Item1);

            return(new Tuple <string, List <SqlParameter> >(sql, condition.Item2));
        }
コード例 #4
0
        public void Build(Expression expression, bool desc = false)
        {
            var resolve = new ExpressionResolve();

            resolve.VisitMember(expression).ForEach(x =>
            {
                var order = _builder.Adapter.Field(_builder.IsEnableAlias ? x.TableAliasName : x.TableName, x.FieldName);
                _builder.Order.Add(order + (desc ? " DESC " : " ASC "));
            });
        }
コード例 #5
0
ファイル: GroupByClause.cs プロジェクト: jjg0519/DapperEx
        public void Build(Expression expression)
        {
            var resolve    = new ExpressionResolve();
            var memberList = new List <string>();

            resolve.VisitMember(expression).ForEach(x =>
            {
                memberList.Add(_builder.Adapter.Field(x.TableName, x.TableAliasName, x.FieldName));
            });
            _builder.GroupBy = " GROUP BY " + string.Join(",", memberList);
        }
コード例 #6
0
        public void TestMethod1()
        {
            var a    = "hello";
            var b    = "hello2";
            var d    = DateTime.Now;
            var res  = ExpressionResolve.Resolve <Demo>(t => t.Name == "hello" && (t.Name == a || t.Name == b) || t.IsDel == true && t.AddTime < d || t.Name == "jerry" || t.Name == "56");
            var res2 = ExpressionResolve.Resolve <Demo>(t => t.Name == "Hello" || (t.Name.Contains("He") && t.Age > 20));
            var res3 = ExpressionResolve.Resolve <Demo>(t => t.Name.Contains("He") && (t.Age > 20 || t.AddTime < d));
            var res4 = ExpressionResolve.Resolve <Demo>(t => (t.Age > 20 || t.AddTime < d) && t.Name.Contains("He"));
            var res5 = ExpressionResolve.Resolve <Demo>(t => (t.Age > 20 && t.AddTime < d) || (t.Name.Contains("Hel") && t.Name.Contains("He")));

            Assert.IsTrue(true);
        }
コード例 #7
0
        public static Tuple <string, List <SqlParameter> > TopSql <T>(this T entity, Expression <Func <T, bool> > func, Expression <Func <T, object> > order, bool isDesc = false)
        {
            var condition = ExpressionResolve.Resolve(func);
            var orderName = order == null ? "" : ExpressionResolve.ResolveSingle(order);
            var sortMode  = isDesc ? "DESC" : "ASC";
            var et        = typeof(T);
            var tableAttr = et.GetCustomAttributes(typeof(TableNameAttribute), true);
            var tableName = tableAttr.Any() ? (tableAttr[0] as TableNameAttribute).Name : et.Name;
            var sql       = order == null
                ? string.Format("SELECT TOP 1 * FROM [{0}] WITH(NOLOCK) WHERE {1} ;", tableName, condition.Item1)
                : string.Format("SELECT TOP 1 * FROM [{0}] WITH(NOLOCK) WHERE {1} ORDER BY [{2}] {3};", tableName, condition.Item1, orderName, sortMode);

            return(new Tuple <string, List <SqlParameter> >(sql, condition.Item2));
        }
コード例 #8
0
        public static Tuple <string, List <SqlParameter>, string> PageSql <T>(this T entity, Expression <Func <T, bool> > where, Expression <Func <T, object> > order, int page, int limit, bool isDesc = false)
        {
            var condition = ExpressionResolve.Resolve(where);
            var orderName = ExpressionResolve.ResolveSingle(order);
            var sortMode  = isDesc ? "DESC" : "ASC";
            var et        = typeof(T);
            var tableAttr = et.GetCustomAttributes(typeof(TableNameAttribute), true);
            var tableName = tableAttr.Any() ? (tableAttr[0] as TableNameAttribute).Name : et.Name;
            var sql       = string.Format(@"WITH PAGERESULT AS (SELECT ROW_NUMBER() OVER(ORDER BY [{0}] {1}) AS NUMBER, * FROM [{2}] WHERE {3}) "
                                          , orderName, sortMode, tableName, condition.Item1);
            var sqlData = string.Format("{0} SELECT TOP {1} * FROM PAGERESULT WHERE NUMBER>{2} ;", sql, limit, (page - 1) * limit);
            var sqlCnt  = string.Format("{0} SELECT COUNT(1) FROM PAGERESULT ;", sql);

            return(new Tuple <string, List <SqlParameter>, string>(sqlData, condition.Item2, sqlCnt));
        }
コード例 #9
0
        public void Build <T1, TResult>(Expression <Func <T1, TResult, bool> > expression, JoinType joinType)
        {
            var joinExpression = Helper.GetBinaryExpression(expression.Body);

            var resolve = new ExpressionResolve();

            var originalMember = resolve.VisitMember(joinExpression.Left).FirstOrDefault();
            var joinMember     = resolve.VisitMember(joinExpression.Right).FirstOrDefault();

            var originalTable = CacheHelper.GetTableInfo(typeof(T));
            var joinTable     = CacheHelper.GetTableInfo(typeof(TResult));

            var joinTypeString = string.Empty;

            switch (joinType)
            {
            case JoinType.InnerJoin:
                joinTypeString = "INNER JOIN";
                break;

            case JoinType.LeftJoin:
                joinTypeString = "LEFT JOIN";
                break;

            case JoinType.RightJoin:
                joinTypeString = "RIGHT JOIN";
                break;
            }

            var joinString = string.Format(" {0} {1} ON {2} = {3}",
                                           joinTypeString,
                                           _builder.Adapter.Table(joinTable.Name, joinTable.Alias),
                                           _builder.Adapter.Field(originalMember.TableAliasName, originalMember.FieldName),
                                           _builder.Adapter.Field(joinMember.TableAliasName, joinMember.FieldName));

            _builder.Table = _builder.Table + joinString;
        }