Ejemplo n.º 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));
        }
Ejemplo n.º 4
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);
        }