/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Model.ViewModels.Basics;
using SqlSugar;
namespace CoreCms.Net.IRepository
{
///
/// 仓储通用接口类
///
/// 泛型实体类
public interface IBaseRepository where T : class
{
#region 查询数据
///
/// 根据主值查询单条数据
///
/// 主键值
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 泛型实体
T QueryById(object pkValue, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据主值查询单条数据
///
///
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
Task QueryByIdAsync(object objId, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据主值列表查询单条数据
///
///
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
List QueryByIDs(object[] lstIds, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据主值列表查询单条数据
///
///
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
Task> QueryByIDsAsync(object[] lstIds, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据主值列表查询单条数据
///
///
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
List QueryByIDs(int[] lstIds, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据主值列表查询单条数据
///
///
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
Task> QueryByIDsAsync(int[] lstIds, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 查询所有数据(无分页,请慎用)
///
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
List Query(bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 查询所有数据(无分页,请慎用)
///
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
Task> QueryAsync(bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 泛型实体集合
List QueryListByClause(Expression> predicate, Expression> orderByPredicate = null,
OrderByType orderByType = OrderByType.Asc, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 泛型实体集合
Task> QueryListByClauseAsync(Expression> predicate,
Expression> orderByPredicate = null, OrderByType orderByType=OrderByType.Asc, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据条件查询一定数量数据
///
/// 条件表达式树
/// 获取数量
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
List QueryListByClause(Expression> predicate, int take,
Expression> orderByPredicate, OrderByType orderByType, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据条件查询一定数量数据
///
/// 条件表达式树
/// 获取数量
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
Task> QueryListByClauseAsync(Expression> predicate, int take,
Expression> orderByPredicate, OrderByType orderByType, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
T QueryByClause(Expression> predicate, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 是否使用锁
/// 数据锁类型
///
Task QueryByClauseAsync(Expression> predicate, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue, bool blUseTranLock = false, DbLockType dbLockType = DbLockType.Wait);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
T QueryByClause(Expression> predicate, Expression> orderByPredicate,
OrderByType orderByType, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 是否使用锁
/// 数据锁类型
///
Task QueryByClauseAsync(Expression> predicate, Expression> orderByPredicate, OrderByType orderByType, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue, bool blUseTranLock = false, DbLockType dbLockType = DbLockType.Wait);
#endregion
#region 新闻数据
///
/// 写入实体数据
///
/// 实体类
/// 是否清除缓存
///
int Insert(T entity, bool isRemoveDataCache = false);
///
/// 写入实体数据
///
/// 实体类
/// 是否清除缓存
///
Task InsertAsync(T entity, bool isRemoveDataCache = false);
///
/// 写入实体数据
///
/// 实体类
///
/// 是否清除缓存
///
int Insert(T entity, Expression> insertColumns, bool isRemoveDataCache = false);
///
/// 写入实体数据
///
/// 实体类
///
/// 是否清除缓存
///
Task InsertAsync(T entity, Expression> insertColumns, bool isRemoveDataCache = false);
///
/// 写入实体数据
///
/// 实体类
///
/// 是否清除缓存
///
bool InsertGuid(T entity, Expression> insertColumns, bool isRemoveDataCache = false);
///
/// 写入实体数据
///
/// 实体类
///
/// 是否清除缓存
///
Task InsertGuidAsync(T entity, Expression> insertColumns, bool isRemoveDataCache = false);
///
/// 批量写入实体数据
///
/// 实体类
/// 是否清除缓存
///
int Insert(List entity, bool isRemoveDataCache = false);
///
/// 批量写入实体数据
///
/// 实体类
/// 是否清除缓存
///
Task InsertAsync(List entity, bool isRemoveDataCache = false);
///
/// 批量写入实体数据
///
/// 实体类
/// 是否清除缓存
///
Task InsertCommandAsync(List entity, bool isRemoveDataCache = false);
#endregion
#region 更新数据
///
/// 批量更新实体数据
///
///
/// 是否清除缓存
///
bool Update(List entity, bool isRemoveDataCache = false);
///
/// 批量更新实体数据
///
///
/// 是否清除缓存
///
Task UpdateAsync(List entity, bool isRemoveDataCache = false);
///
/// 更新实体数据
///
///
/// 是否清除缓存
///
bool Update(T entity, bool isRemoveDataCache = false);
///
/// 更新实体数据
///
///
/// 是否清除缓存
///
Task UpdateAsync(T entity, bool isRemoveDataCache = false);
///
/// 更新某个字段
///
/// lambda表达式,如it => new Student() { Name = "a", CreateTime = DateTime.Now }
/// lambda判断
/// 是否清除缓存
///
bool Update(Expression> columns, Expression> where, bool isRemoveDataCache = false);
///
/// 更新某个字段
///
/// lambda表达式,如it => new Student() { Name = "a", CreateTime = DateTime.Now }
/// lambda判断
/// 是否清除缓存
///
Task UpdateAsync(Expression> columns, Expression> where, bool isRemoveDataCache = false);
#endregion
#region 删除数据
///
/// 删除数据
///
/// 实体类
/// 是否清除缓存
///
bool Delete(T entity, bool isRemoveDataCache = false);
///
/// 删除数据
///
/// 实体类
/// 是否清除缓存
///
Task DeleteAsync(T entity, bool isRemoveDataCache = false);
///
/// 删除数据
///
/// 实体类集合
/// 是否清除缓存
///
bool Delete(IEnumerable entity, bool isRemoveDataCache = false);
///
/// 删除数据
///
/// 实体类集合
/// 是否清除缓存
///
Task DeleteAsync(IEnumerable entity, bool isRemoveDataCache = false);
///
/// 删除数据
///
/// 过滤条件
/// 是否清除缓存
///
bool Delete(Expression> where, bool isRemoveDataCache = false);
///
/// 删除数据
///
/// 过滤条件
/// 是否清除缓存
///
Task DeleteAsync(Expression> where, bool isRemoveDataCache = false);
///
/// 删除指定ID的数据
///
///
/// 是否清除缓存
///
bool DeleteById(object id, bool isRemoveDataCache = false);
///
/// 删除指定ID的数据
///
///
/// 是否清除缓存
///
Task DeleteByIdAsync(object id, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
bool DeleteByIds(int[] ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
Task DeleteByIdsAsync(int[] ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
bool DeleteByIds(long[] ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
Task DeleteByIdsAsync(long[] ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
bool DeleteByIds(Guid[] ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
Task DeleteByIdsAsync(Guid[] ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
bool DeleteByIds(string[] ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
Task DeleteByIdsAsync(string[] ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
bool DeleteByIds(List ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
Task DeleteByIdsAsync(List ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
bool DeleteByIds(List ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
Task DeleteByIdsAsync(List ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
bool DeleteByIds(List ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
Task DeleteByIdsAsync(List ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
bool DeleteByIds(List ids, bool isRemoveDataCache = false);
///
/// 删除指定ID集合的数据(批量删除)
///
///
/// 是否清除缓存
///
Task DeleteByIdsAsync(List ids, bool isRemoveDataCache = false);
#endregion
#region 判断数据
///
/// 判断数据是否存在
///
/// 条件表达式树
/// 是否使用WITH(NoLock)
///
bool Exists(Expression> predicate, bool blUseNoLock = false);
///
/// 判断数据是否存在
///
/// 条件表达式树
/// 是否使用WITH(NoLock)
///
Task ExistsAsync(Expression> predicate, bool blUseNoLock = false);
#endregion
#region 统计数据
///
/// 获取数据总数
///
/// 条件表达式树
/// 是否使用WITH(NoLock)
/// 是否缓存
/// 缓存时长(分钟)
///
int GetCount(Expression> predicate, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 获取数据总数
///
/// 条件表达式树
/// 是否使用WITH(NoLock)
/// 是否缓存
/// 缓存时长(分钟)
///
Task GetCountAsync(Expression> predicate, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NoLock)
/// 是否缓存
/// 缓存时长(分钟)
///
int GetSum(Expression> predicate, Expression> field, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NoLock)
/// 是否缓存
/// 缓存时长(分钟)
///
Task GetSumAsync(Expression> predicate, Expression> field, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NoLock)
/// 是否缓存
/// 缓存时长(分钟)
///
decimal GetSum(Expression> predicate, Expression> field, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NoLock)
/// 是否缓存
/// 缓存时长(分钟)
///
Task GetSumAsync(Expression> predicate, Expression> field, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NoLock)
/// 是否缓存
/// 缓存时长(分钟)
///
float GetSum(Expression> predicate, Expression> field, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NoLock)
/// 是否缓存
/// 缓存时长(分钟)
///
Task GetSumAsync(Expression> predicate, Expression> field, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
#endregion
#region 分页查询
///
/// 根据条件查询分页数据
///
/// 判断集合
/// 排序方式
/// 当前页面索引
/// 分布大小
///
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
IPageList QueryPage(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 根据条件查询分页数据
///
/// 判断集合
/// 排序方式
/// 当前页面索引
/// 分布大小
///
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
///
Task> QueryPageAsync(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue);
#endregion
#region 联表查询
///
/// 查询-多表查询
///
/// 实体1
/// 实体2
/// 返回对象
/// 关联表达式 (join1,join2) => new object[] {JoinType.Left,join1.UserNo==join2.UserNo}
/// 返回表达式 (s1, s2) => new { Id =s1.UserNo, Id1 = s2.UserNo}
/// 查询表达式 (w1, w2) =>w1.UserNo == "")
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 值
List QueryMuch(
Expression> joinExpression,
Expression> selectExpression,
Expression> whereLambda = null, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue) where T1 : class, new();
///
/// 查询-多表查询
///
/// 实体1
/// 实体2
/// 返回对象
/// 关联表达式 (join1,join2) => new object[] {JoinType.Left,join1.UserNo==join2.UserNo}
/// 返回表达式 (s1, s2) => new { Id =s1.UserNo, Id1 = s2.UserNo}
/// 查询表达式 (w1, w2) =>w1.UserNo == "")
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 值
Task> QueryMuchAsync(
Expression> joinExpression,
Expression> selectExpression,
Expression> whereLambda = null, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue) where T1 : class, new();
///
/// 查询-多表查询
///
/// 实体1
/// 实体2
/// 返回对象
/// 关联表达式 (join1,join2) => new object[] {JoinType.Left,join1.UserNo==join2.UserNo}
/// 返回表达式 (s1, s2) => new { Id =s1.UserNo, Id1 = s2.UserNo}
/// 查询表达式 (w1, w2) =>w1.UserNo == "")
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 值
TResult QueryMuchFirst(
Expression> joinExpression,
Expression> selectExpression,
Expression> whereLambda = null, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue) where T1 : class, new();
///
/// 查询-多表查询
///
/// 实体1
/// 实体2
/// 返回对象
/// 关联表达式 (join1,join2) => new object[] {JoinType.Left,join1.UserNo==join2.UserNo}
/// 返回表达式 (s1, s2) => new { Id =s1.UserNo, Id1 = s2.UserNo}
/// 查询表达式 (w1, w2) =>w1.UserNo == "")
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 值
Task QueryMuchFirstAsync(
Expression> joinExpression,
Expression> selectExpression,
Expression> whereLambda = null, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue) where T1 : class, new();
///
/// 查询-三表查询
///
/// 实体2
/// 实体3
/// 返回对象
///
/// 关联表达式 (join1,join2) => new object[] {JoinType.Left,join1.UserNo==join2.UserNo}
/// 返回表达式 (s1, s2) => new { Id =s1.UserNo, Id1 = s2.UserNo}
/// 查询表达式 (w1, w2) =>w1.UserNo == "")
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 值
List QueryMuch(
Expression> joinExpression,
Expression> selectExpression,
Expression> whereLambda = null, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue) where T1 : class, new();
///
/// 查询-三表查询
///
/// 实体2
/// 实体3
/// 返回对象
///
/// 关联表达式 (join1,join2) => new object[] {JoinType.Left,join1.UserNo==join2.UserNo}
/// 返回表达式 (s1, s2) => new { Id =s1.UserNo, Id1 = s2.UserNo}
/// 查询表达式 (w1, w2) =>w1.UserNo == "")
/// 是否使用WITH(NoLock)
/// 是否启用缓存
/// 缓存时长(分钟)
/// 值
Task> QueryMuchAsync(
Expression> joinExpression,
Expression> selectExpression,
Expression> whereLambda = null, bool blUseNoLock = false, bool isDataCache = false, int cacheTimes = int.MaxValue) where T1 : class, new();
#endregion
#region SQL查询
///
/// 执行sql语句并返回List
///
///
///
///
///
List SqlQuery(string sql, List parameters);
///
/// 执行sql语句并返回List
///
///
///
/// 是否启用缓存
/// 缓存时长(分钟)
///
Task> SqlQueryable(string sql, bool isDataCache = false, int cacheTimes = int.MaxValue);
///
/// 执行调用存储过程(返回DataTable)
///
/// 存储过程名称
/// 参数
///
Task SqlQueryDataTableByStoredProcedure(string useStoredProcedureName, List parameters);
///
/// 执行调用存储过程(返回List)
///
/// 返回类型
/// 存储过程名称
/// 参数
///
Task> SqlQueryableByStoredProcedure(string useStoredProcedureName, List parameters);
#endregion
}
}