/// <summary> /// 别名处理 /// </summary> /// <param name="tableAlias">表别名</param> /// <returns>别名</returns> private string AtkTableAlias(AtkAlias tableAlias) { if (tableAlias == AtkAlias.a99_empty) { return(string.Empty); } else { return("[" + tableAlias.ToString() + "]."); } }
/// <summary> /// 设置where语句 /// </summary> /// <param name="atkExp">表达式</param> /// <param name="atkUion">操作方法</param> /// <param name="tableAlias">表别名</param> private void SetWhere(System.Linq.Expressions.Expression atkExp, AtkExpUnion atkUion = AtkExpUnion.And, AtkAlias tableAlias = AtkAlias.a0) { var itemstr = AtkExpressionWriterSql.AtkWhereWriteToString(atkExp, AtkExpSqlType.atkWhere, tableAlias.ToString()); if (string.IsNullOrWhiteSpace(_atkWhereStr)) { _atkWhereStr = itemstr; } else { if (atkUion == AtkExpUnion.Or) { _atkWhereStr = _atkWhereStr + " Or " + itemstr; } else { _atkWhereStr = _atkWhereStr + " And " + itemstr; } } }
/// <summary> /// 排序 /// </summary> /// <param name="atkExp">表达式</param> /// <param name="atkAsc">正序</param> /// <param name="tableAlias">别名</param> private void SetOrderBy(System.Linq.Expressions.Expression atkExp, bool atkAsc, AtkAlias tableAlias) { var itemstr = AtkExpressionWriterSql.AtkWhereWriteToString(atkExp, AtkExpSqlType.atkOrder, tableAlias.ToString()); if (!atkAsc) { itemstr = itemstr + " Desc"; } if (string.IsNullOrWhiteSpace(_atkOrderByStr)) { _atkOrderByStr = itemstr; } else { _atkOrderByStr = _atkOrderByStr + "," + itemstr; } }
private int _pageRows = 0; //每页行数 /// <summary> /// 设置表达式条件 /// </summary> /// <param name="atkExp">表达式</param> /// <param name="atkUion">操作方法</param> /// <param name="tableAlias">别名</param> private void SetConditionStr(System.Linq.Expressions.Expression atkExp, AtkExpUnion atkUion = AtkExpUnion.And, AtkAlias tableAlias = AtkAlias.a0) { SetWhere(atkExp, atkUion, tableAlias);//Where条件句 SetOrderBy(atkExp, false, tableAlias);//Order by 语句 }
/// <summary> /// 表达式中,生成更新表字段的方法 /// 当更只更新记录中部分记录时,可使用此方法 /// <para>atkexp.UpdateFields(s => new { s.Afield, s.Bfield }, AtkAlias.a2);</para> /// </summary> /// <typeparam name="F">多字段的一个New对象</typeparam> /// <param name="atkFieldSelect">要更新的字段</param> /// <param name="tableAlias">表的别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> UpdateFields <F>(Expression <Func <T, F> > atkFieldSelect, AtkAlias tableAlias = AtkAlias.a0) { var fieldSelects = Reflect <T> .GetPropertys <F>(atkFieldSelect); foreach (var fieldSelect in fieldSelects) { _atkUpdateListField.Add(AtkTableAlias(tableAlias) + "[" + fieldSelect.Name + "]", fieldSelect.Name); } return(this); }
/// <summary> /// 如果条件满足时,将添加前一个OrderBy语句,否则添加后一个 /// </summary> /// <typeparam name="D">OrderBy的数据字段类型</typeparam> /// <param name="atkCondition">Lambda条件</param> /// <param name="atkExpWhenTrue">条件为真时</param> /// <param name="atkExpWhenFalse">条件为假时</param> /// <param name="atkAsc">排序方式</param> /// <param name="tableAlias">表的别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> AddOrderBy <D>(Func <bool> atkCondition, Expression <Func <T, D> > atkExpWhenTrue, Expression <Func <T, D> > atkExpWhenFalse, bool atkAsc = true, AtkAlias tableAlias = AtkAlias.a0) { return(AddOrderBy <D>(atkCondition(), atkExpWhenTrue, atkExpWhenFalse, atkAsc, tableAlias)); }
/// <summary> /// 如果条件满足时,将添加前一个OrderBy语句,否则添加后一个 /// </summary> /// <typeparam name="D">OrderBy的数据字段类型</typeparam> /// <param name="atkCondition">条件</param> /// <param name="atkExpWhenTrue">条件为真时</param> /// <param name="atkExpWhenFalse">条件为假时</param> /// <param name="atkAsc">排序方式</param> /// <param name="tableAlias">表的别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> AddOrderBy <D>(bool atkCondition, Expression <Func <T, D> > atkExpWhenTrue, Expression <Func <T, D> > atkExpWhenFalse, bool atkAsc = true, AtkAlias tableAlias = AtkAlias.a0) { if (atkCondition) { SetOrderBy(atkExpWhenTrue, atkAsc, tableAlias); } else { SetOrderBy(atkExpWhenFalse, atkAsc, tableAlias); } return(this); }
/// <summary> /// 如果条件满足时,添加一个OrderBy语句 /// </summary> /// <typeparam name="D">OrderBy的数据字段类型</typeparam> /// <param name="atkCondition">Lambda条件</param> /// <param name="atkExp">OrderBy条件表达式</param> /// <param name="tableAlias">表的别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> AddOrderBy <D>(Func <bool> atkCondition, Expression <Func <T, D> > atkExp, AtkAlias tableAlias = AtkAlias.a0) { AddOrderBy <D>(atkCondition(), atkExp, true, tableAlias); return(this); }
/// <summary> /// 添加一个OrderBy语句 /// </summary> /// <typeparam name="D">OrderBy的字段数据类型</typeparam> /// <param name="atkExp">OrderBy条件表达式</param> /// <param name="atkAsc">排序方式</param> /// <param name="tableAlias">表的别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> AddOrderBy <D>(Expression <Func <T, D> > atkExp, bool atkAsc = true, AtkAlias tableAlias = AtkAlias.a0) { SetOrderBy(atkExp, atkAsc, tableAlias); return(this); }
/// <summary> /// 增加多条件 in 的操作方法 /// <example> /// SELECT DishesID, DishesName, DishesUnit /// FROM dbo.Aidb_DishesItems As [a0] /// Where DishesTypeID in (1,2,3,6) /// 中的 “iin (1,2,3,6)”就是本属性可以的一种形式 /// </example> /// </summary> /// <typeparam name="F">字段的类型</typeparam> /// <param name="atkFieldSelect">要查询的字段(DishesTypeID)</param> /// <param name="inConditon">要查询的值(DishesTypeID的可能值)</param> /// <param name="tableAlias">表的别名</param> /// <returns>条件 in 的操作方法</returns> public AtkExpConditions <T> AddMutiInWhere <F>(Expression <Func <T, F> > atkFieldSelect, IList <int> inConditon, AtkAlias tableAlias = AtkAlias.a0) { if (inConditon.Count == 0) { return(this); } var fieldSelect = AtkTableAlias(tableAlias) + Reflect <T> .GetProperty <F>(atkFieldSelect).Name; string atkincdt = string.Empty; foreach (var item in inConditon) { if (string.IsNullOrWhiteSpace(atkincdt)) { atkincdt = item.ToString(); } else { atkincdt = atkincdt + "," + item.ToString(); } } if (!string.IsNullOrWhiteSpace(atkincdt)) { SetWhere(fieldSelect + " in (" + atkincdt + ")"); } return(this); }
/// <summary> /// 如果条件满足时,将添加前一个条件语句(Where),否则添加后一个,以 Or 相联接 /// </summary> /// <param name="atkCondition">Lambda条件</param> /// <param name="atkExpWhenTrue">条件为真时</param> /// <param name="atkExpWhenFalse">条件为假时</param> /// <param name="tableAlias">表别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> AddOrWhere(Func <bool> atkCondition, Expression <Func <T, bool> > atkExpWhenTrue, Expression <Func <T, bool> > atkExpWhenFalse, AtkAlias tableAlias = AtkAlias.a0) { return(AddOrWhere(atkCondition(), atkExpWhenTrue, atkExpWhenFalse)); }
/// <summary> /// 如果条件满足时,将添加前一个条件语句(Where),否则添加后一个,以 Or 相联接 /// </summary> /// <param name="atkCondition">条件</param> /// <param name="atkExpWhenTrue">条件为真时</param> /// <param name="atkExpWhenFalse">条件为假时</param> /// <param name="tableAlias">表别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> AddOrWhere(bool atkCondition, Expression <Func <T, bool> > atkExpWhenTrue, Expression <Func <T, bool> > atkExpWhenFalse, AtkAlias tableAlias = AtkAlias.a0) { if (atkCondition) { SetWhere(atkExpWhenTrue, AtkExpUnion.Or, tableAlias); } else { SetWhere(atkExpWhenFalse, AtkExpUnion.Or, tableAlias); } return(this); }
/// <summary> /// 添加一个Where条件语句,如果语句存在,则以 Or 相联接 /// </summary> /// <param name="atkExp">Where条件表达式</param> /// <param name="tableAlias">表别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> AddOrWhere(Expression <Func <T, bool> > atkExp, AtkAlias tableAlias = AtkAlias.a0) { SetWhere(atkExp, AtkExpUnion.Or, tableAlias); return(this); }
/// <summary> /// 当给定lambda表达式条件满足时,添加一个Where条件语句,如果语句存在,则以 And 相联接 /// </summary> /// <param name="atkCondition">给定lambda表达式条件</param> /// <param name="atkExp">条件表达式</param> /// <param name="tableAlias">表别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> AddAndWhere(Func <bool> atkCondition, Expression <Func <T, bool> > atkExp, AtkAlias tableAlias = AtkAlias.a0) { return(AddAndWhere(atkCondition(), atkExp, tableAlias)); }
/// <summary> /// 当给定条件满足时,添加一个Where条件语句,如果语句存在,则以 And 相联接 /// </summary> /// <param name="atkCondition">给定条件</param> /// <param name="atkExp">Where条件表达式</param> /// <param name="tableAlias">表别名</param> /// <returns>更改后的表达式</returns> public AtkExpConditions <T> AddAndWhere(bool atkCondition, Expression <Func <T, bool> > atkExp, AtkAlias tableAlias = AtkAlias.a0) { if (atkCondition) { SetWhere(atkExp, AtkExpUnion.And, tableAlias); } return(this); }