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 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 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 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)); }