using System.Data;
using System.Linq.Expressions;
using SqlSugar;
using Tiobon.Core.Common;
using Tiobon.Core.Model;
namespace Tiobon.Core.IServices.BASE
{
///
/// 增删改查接口
///
///
///
///
///
public interface IBaseServices where TEntity : class
{
ISqlSugarClient Db { get; }
Task QueryById(object objId);
Task QueryById(object objId, bool blnUseCache = false);
Task> QueryByIDs(object[] lstIds);
Task Add(TEntity model);
Task> Add(List listEntity);
Task DeleteById(object id);
Task Delete(TEntity model);
Task DeleteByIds(object[] ids);
Task Update(TEntity model);
Task Update(List model);
Task Update(TEntity entity, string where);
Task Update(object operateAnonymousObjects);
Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string where = "");
Task> Query();
Task> Query(string where);
Task> Query(Expression> whereExpression);
Task> Query(Expression> whereExpression, string orderByFields);
Task> Query(Expression> expression);
Task> Query(Expression> expression, Expression> whereExpression, string orderByFields);
Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true);
Task> Query(string where, string orderByFields);
Task> QuerySql(string sql, SugarParameter[] parameters = null);
Task QueryTable(string sql, SugarParameter[] parameters = null);
Task> Query(Expression> whereExpression, int top, string orderByFields);
Task> Query(string where, int top, string orderByFields);
Task> Query(
Expression> whereExpression, int pageIndex, int pageSize, string orderByFields);
Task> Query(string where, int pageIndex, int pageSize, string orderByFields);
Task> QueryPage(Expression> whereExpression, int pageIndex = 1, int pageSize = 20, string orderByFields = null);
Task> QueryFilterPage([FromFilter] QueryFilter filter);
Task> QueryMuch(
Expression> joinExpression,
Expression> selectExpression,
Expression> whereLambda = null) where T : class, new();
Task> QueryPage(PaginationModel pagination);
#region 分表
Task QueryByIdSplit(object objId);
Task> AddSplit(TEntity entity);
Task DeleteSplit(TEntity entity, DateTime dateTime);
Task UpdateSplit(TEntity entity, DateTime dateTime);
Task> QueryPageSplit(Expression> whereExpression, DateTime beginTime, DateTime endTime, int pageIndex = 1, int pageSize = 20, string orderByFields = null);
#endregion
}
}