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)); }
public QueryBuilder On(ConditionBuilder builder) { var on = builder.Build(); param.TryConcat(on.param); sb.Append(" on " + on.sql); return(this); }
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); } }
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); }
public static QueryBuilder Where <TEntity>(this QueryBuilder builder, object where) { builder.Where(ConditionBuilder.FormDynamic <TEntity>(where)); return(builder); }
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)); }