Exemple #1
0
        public static ConditionBuilder FormDynamic <TEntity>(dynamic where)
        {
            var builder = new ConditionBuilder();

            if (where as object == null)
            {
                return(builder);
            }
            var  t       = FormatTableAliasKey <TEntity>();
            bool isFirst = true;

            foreach (var item in Dapper.GetDynamicFields(where as object))
            {
                if (isFirst)
                {
                    isFirst = false;
                }
                else
                {
                    builder.And();
                }

                builder.Expression(builder.FormatFiled(t, item.Name), "=", item.Value);
            }

            return(builder);
        }
        public static ConditionBuilder IsNullOrEmpty <TEntity>(this ConditionBuilder builder, Expression <Func <TEntity, object> > field)
        {
            var t1 = ConditionBuilder.FormatTableAliasKey <TEntity>();
            var n1 = field.GetPropertyName();

            return(builder.IsNullOrEmpty(builder.FormatFiled(t1, n1)));
        }
        public static ConditionBuilder Equal <TEntity>(this ConditionBuilder builder, Expression <Func <TEntity, object> > field, object value)
        {
            var t1 = ConditionBuilder.FormatTableAliasKey <TEntity>();
            var n1 = field.GetPropertyName();

            return(builder.Expression(builder.FormatFiled(t1, n1), "=", value));
        }
Exemple #4
0
        public QueryBuilder On(ConditionBuilder builder)
        {
            var on = builder.Build();

            param.TryConcat(on.param);
            sb.Append(" on " + on.sql);
            return(this);
        }
Exemple #5
0
 public QueryBuilder Where(ConditionBuilder builder)
 {
     if (builder.HasCondition)
     {
         var where = builder.Build();
         param.TryConcat(where.param);
         sb.Append(" where " + where.sql);
     }
     return(this);
 }
 public SimpleQueryBuilder(dynamic where, dynamic sort) : base()
 {
     Select <TEntity>().From <TEntity>();
     if (where as object != null)
     {
         Where(ConditionBuilder.FormDynamic <TEntity>(where as object));
     }
     if (sort as object != null)
     {
         Sort(sort as object);
     }
 }
Exemple #7
0
        public static ConditionBuilder FromSearch <TEntity>(object search)
        {
            var builder = new ConditionBuilder();

            if (search == null)
            {
                return(builder);
            }
            bool isFirst = true;

            foreach (PropertyInfo p in search.GetType().GetProperties())
            {
                //取得ConditionAttribute特性
                var attr           = p.GetCustomAttribute <ConditionAttribute>();
                var ignoreWhenNull = attr != null ? attr.WhenNull == WhenNull.Ignore : true;
                var value          = p.GetValue(search);

                //值为NULL的处理
                if (value == null && ignoreWhenNull)
                {
                    continue;
                }
                if (p.PropertyType == typeof(string) && string.IsNullOrEmpty((string)value) && ignoreWhenNull)
                {
                    continue;
                }

                if (isFirst)
                {
                    isFirst = false;
                }
                else
                {
                    builder.And();
                }

                //取得字段名
                var name = (attr != null && !string.IsNullOrEmpty(attr.Name)) ? attr.Name : p.Name;

                var t = FormatTableAliasKey <TEntity>();

                var field = builder.FormatFiled(t, name);

                ConditionOperation operation = attr != null ? attr.Operation : ConditionOperation.Equal;
                switch (operation)
                {
                case ConditionOperation.Equal:
                    builder.Expression(field, "=", value);
                    break;

                case ConditionOperation.NotEqual:
                    builder.Expression(field, "<>", value);
                    break;

                case ConditionOperation.In:
                    builder.In(field, value);
                    break;

                case ConditionOperation.NotIn:
                    builder.NotIn(field, value);
                    break;

                case ConditionOperation.Like:
                    builder.Like(field, value, attr?.LeftChar, attr?.RightChar);
                    break;

                case ConditionOperation.NotLike:
                    builder.NotLike(field, value, attr?.LeftChar, attr?.RightChar);
                    break;

                case ConditionOperation.Greater:
                    builder.Expression(field, ">", value);
                    break;

                case ConditionOperation.GreaterOrEqual:
                    builder.Expression(field, ">=", value);
                    break;

                case ConditionOperation.Less:
                    builder.Expression(field, "<", value);
                    break;

                case ConditionOperation.LessOrEqual:
                    builder.Expression(field, "<=", value);
                    break;

                case ConditionOperation.Custom:
                    //自定义
                    var s = attr?.CustomSql;
                    if (!string.IsNullOrEmpty(s))
                    {
                        string pn = builder.GetParameterName();
                        s = s.Replace("@value", "@" + pn);
                        builder.Append(s, new KeyValuePair <string, object>(pn, value));
                    }
                    break;

                default:
                    builder.Expression(field, "=", value);
                    break;
                }
            }

            return(builder);
        }
Exemple #8
0
 public static QueryBuilder Where <TEntity>(this QueryBuilder builder, object where)
 {
     builder.Where(ConditionBuilder.FormDynamic <TEntity>(where));
     return(builder);
 }
Exemple #9
0
 public static QueryBuilder Where <TEntity>(this QueryBuilder builder, DapperSearch <TEntity> search)
 {
     builder.Where(ConditionBuilder.FromSearch <TEntity>(search));
     return(builder);
 }
 public static ConditionBuilder LessOrEqual <T1, T2>(this ConditionBuilder builder, Expression <Func <T1, object> > field1, Expression <Func <T1, object> > field2)
 {
     return(builder.Expression <T1, T2>(field1, "<=", field2));
 }
 public static ConditionBuilder Greater <T1, T2>(this ConditionBuilder builder, Expression <Func <T1, object> > field1, Expression <Func <T1, object> > field2)
 {
     return(builder.Expression <T1, T2>(field1, ">", field2));
 }