/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2021/1/31 21:45:10
* 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.IServices
{
///
/// 服务仓储通用接口类
///
///
public interface IBaseServices where T : class
{
///
/// 根据主值查询单条数据
///
/// 主键值
/// 是否使用WITH(NOLOCK)
/// 泛型实体
T QueryById(object pkValue, bool blUseNoLock = false);
///
/// 根据主值查询单条数据
///
///
/// 是否使用WITH(NOLOCK)
///
Task QueryByIdAsync(object objId, bool blUseNoLock = false);
///
/// 根据主值列表查询单条数据
///
///
/// 是否使用WITH(NOLOCK)
///
List QueryByIDs(object[] lstIds, bool blUseNoLock = false);
///
/// 根据主值列表查询单条数据
///
///
/// 是否使用WITH(NOLOCK)
///
Task> QueryByIDsAsync(object[] lstIds, bool blUseNoLock = false);
///
/// 根据主值列表查询单条数据
///
///
/// 是否使用WITH(NOLOCK)
///
List QueryByIDs(int[] lstIds, bool blUseNoLock = false);
///
/// 根据主值列表查询单条数据
///
///
/// 是否使用WITH(NOLOCK)
///
Task> QueryByIDsAsync(int[] lstIds, bool blUseNoLock = false);
///
/// 查询所有数据(无分页,请慎用)
///
/// 是否使用WITH(NOLOCK)
///
List Query(bool blUseNoLock = false);
///
/// 查询所有数据(无分页,请慎用)
///
/// 是否使用WITH(NOLOCK)
///
Task> QueryAsync(bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件
/// 排序
/// 是否使用WITH(NOLOCK)
/// 泛型实体集合
List QueryListByClause(string strWhere, string orderBy = "", bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件
/// 排序
/// 是否使用WITH(NOLOCK)
/// 泛型实体集合
Task> QueryListByClauseAsync(string strWhere, string orderBy = "", bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序
/// 是否使用WITH(NOLOCK)
/// 泛型实体集合
List QueryListByClause(Expression> predicate, string orderBy = "", bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序
/// 是否使用WITH(NOLOCK)
/// 泛型实体集合
Task> QueryListByClauseAsync(Expression> predicate, string orderBy = "",
bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NOLOCK)
/// 泛型实体集合
List QueryListByClause(Expression> predicate, Expression> orderByPredicate,
OrderByType orderByType, bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NOLOCK)
/// 泛型实体集合
Task> QueryListByClauseAsync(Expression> predicate,
Expression> orderByPredicate, OrderByType orderByType, bool blUseNoLock = false);
///
/// 根据条件查询一定数量数据
///
/// 条件表达式树
/// 获取数量
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NOLOCK)
///
List QueryListByClause(Expression> predicate, int take,
Expression> orderByPredicate, OrderByType orderByType, bool blUseNoLock = false);
///
/// 根据条件查询一定数量数据
///
/// 条件表达式树
/// 获取数量
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NOLOCK)
///
Task> QueryListByClauseAsync(Expression> predicate, int take,
Expression> orderByPredicate, OrderByType orderByType, bool blUseNoLock = false);
///
/// 根据条件查询一定数量数据
///
/// 条件表达式树
/// 获取数量
/// 排序字段,如name asc,age desc
/// 是否使用WITH(NOLOCK)
///
List QueryListByClause(Expression> predicate, int take, string strOrderByFileds = "",
bool blUseNoLock = false);
///
/// 根据条件查询一定数量数据
///
/// 条件表达式树
/// 获取数量
/// 排序字段,如name asc,age desc
/// 是否使用WITH(NOLOCK)
///
Task> QueryListByClauseAsync(Expression> predicate, int take,
string strOrderByFileds = "", bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 是否使用WITH(NOLOCK)
///
T QueryByClause(Expression> predicate, bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 是否使用WITH(NOLOCK)
///
Task QueryByClauseAsync(Expression> predicate, bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NOLOCK)
///
T QueryByClause(Expression> predicate, Expression> orderByPredicate,
OrderByType orderByType, bool blUseNoLock = false);
///
/// 根据条件查询数据
///
/// 条件表达式树
/// 排序字段
/// 排序顺序
/// 是否使用WITH(NOLOCK)
///
Task QueryByClauseAsync(Expression> predicate, Expression> orderByPredicate,
OrderByType orderByType, bool blUseNoLock = false);
///
/// 根据条件查询数据(悲观锁等待模式)
///
/// 条件表达式树
/// 排序字段
/// 排序顺序
/// 是否使用TranLock
///
Task QueryByClauseWithTranLockAsync(Expression> predicate,
Expression> orderByPredicate, OrderByType orderByType, bool blUseTranLock = false);
///
/// 写入实体数据
///
/// 实体类
///
int Insert(T entity);
///
/// 写入实体数据
///
/// 实体类
///
Task InsertAsync(T entity);
///
/// 写入实体数据
///
/// 实体类
///
int Insert(T entity, Expression> insertColumns = null);
///
/// 写入实体数据
///
/// 实体类
///
Task InsertAsync(T entity, Expression> insertColumns = null);
///
/// 写入实体数据
///
/// 实体类
///
bool InsertGuid(T entity, Expression> insertColumns = null);
///
/// 写入实体数据
///
/// 实体类
///
Task InsertGuidAsync(T entity, Expression> insertColumns = null);
///
/// 批量写入实体数据
///
/// 实体类
///
int Insert(List entity);
///
/// 批量写入实体数据
///
/// 实体类
///
Task InsertAsync(List entity);
///
/// 批量写入实体数据
///
/// 实体类
///
Task InsertCommandAsync(List entity);
///
/// 批量更新实体数据
///
///
///
bool Update(List entity);
///
/// 批量更新实体数据
///
///
///
Task UpdateAsync(List entity);
///
/// 更新实体数据
///
///
///
bool Update(T entity);
///
/// 更新实体数据
///
///
///
Task UpdateAsync(T entity);
///
/// 根据手写条件更新
///
///
///
///
bool Update(T entity, string strWhere);
///
/// 根据手写条件更新
///
///
///
///
Task UpdateAsync(T entity, string strWhere);
///
/// 根据手写sql语句更新数据
///
///
///
///
bool Update(string strSql, SugarParameter[] parameters = null);
///
/// 根据手写sql语句更新数据
///
///
///
///
Task UpdateAsync(string strSql, SugarParameter[] parameters = null);
///
/// 更新某个字段
///
/// lamdba表达式,如it => new Student() { Name = "a", CreateTime = DateTime.Now }
/// lamdba判断
///
bool Update(Expression> columns, Expression> where);
///
/// 更新某个字段
///
/// lamdba表达式,如it => new Student() { Name = "a", CreateTime = DateTime.Now }
/// lamdba判断
///
Task UpdateAsync(Expression> columns, Expression> where);
///
/// 根据条件更新
///
///
///
///
///
///
Task UpdateAsync(T entity, List lstColumns = null, List lstIgnoreColumns = null,
string strWhere = "");
///
/// 根据条件更新
///
///
///
///
///
///
bool Update(T entity, List lstColumns = null, List lstIgnoreColumns = null,
string strWhere = "");
///
/// 删除数据
///
/// 实体类
///
bool Delete(T entity);
///
/// 删除数据
///
/// 实体类
///
Task DeleteAsync(T entity);
///
/// 删除数据
///
/// 实体类集合
///
bool Delete(IEnumerable entity);
///
/// 删除数据
///
/// 实体类集合
///
Task DeleteAsync(IEnumerable entity);
///
/// 删除数据
///
/// 过滤条件
///
bool Delete(Expression> where);
///
/// 删除数据
///
/// 过滤条件
///
Task DeleteAsync(Expression> where);
///
/// 删除指定ID的数据
///
///
///
bool DeleteById(object id);
///
/// 删除指定ID的数据
///
///
///
Task DeleteByIdAsync(object id);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
bool DeleteByIds(int[] ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
Task DeleteByIdsAsync(int[] ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
bool DeleteByIds(long[] ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
Task DeleteByIdsAsync(long[] ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
bool DeleteByIds(Guid[] ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
Task DeleteByIdsAsync(Guid[] ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
bool DeleteByIds(string[] ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
Task DeleteByIdsAsync(string[] ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
bool DeleteByIds(List ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
Task DeleteByIdsAsync(List ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
bool DeleteByIds(List ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
Task DeleteByIdsAsync(List ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
bool DeleteByIds(List ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
Task DeleteByIdsAsync(List ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
bool DeleteByIds(List ids);
///
/// 删除指定ID集合的数据(批量删除)
///
///
///
Task DeleteByIdsAsync(List ids);
///
/// 判断数据是否存在
///
/// 条件表达式树
/// 是否使用WITH(NOLOCK)
///
bool Exists(Expression> predicate, bool blUseNoLock = false);
///
/// 判断数据是否存在
///
/// 条件表达式树
/// 是否使用WITH(NOLOCK)
///
Task ExistsAsync(Expression> predicate, bool blUseNoLock = false);
///
/// 获取数据总数
///
/// 条件表达式树
/// 是否使用WITH(NOLOCK)
///
int GetCount(Expression> predicate, bool blUseNoLock = false);
///
/// 获取数据总数
///
/// 条件表达式树
/// 是否使用WITH(NOLOCK)
///
Task GetCountAsync(Expression> predicate, bool blUseNoLock = false);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NOLOCK)
///
int GetSum(Expression> predicate, Expression> field, bool blUseNoLock = false);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NOLOCK)
///
Task GetSumAsync(Expression> predicate, Expression> field,
bool blUseNoLock = false);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NOLOCK)
///
decimal GetSum(Expression> predicate, Expression> field,
bool blUseNoLock = false);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NOLOCK)
///
Task GetSumAsync(Expression> predicate, Expression> field,
bool blUseNoLock = false);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NOLOCK)
///
float GetSum(Expression> predicate, Expression> field, bool blUseNoLock = false);
///
/// 获取数据某个字段的合计
///
/// 条件表达式树
/// 字段
/// 是否使用WITH(NOLOCK)
///
Task GetSumAsync(Expression> predicate, Expression> field,
bool blUseNoLock = false);
///
/// 根据条件查询分页数据
///
///
///
/// 当前页面索引
/// 分布大小
/// 是否使用WITH(NOLOCK)
///
IPageList QueryPage(Expression> predicate, string orderBy = "", int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false);
///
/// 根据条件查询分页数据
///
///
///
/// 当前页面索引
/// 分布大小
/// 是否使用WITH(NOLOCK)
///
Task> QueryPageAsync(Expression> predicate, string orderBy = "", int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false);
///
/// 根据条件查询分页数据
///
/// 判断集合
/// 排序方式
/// 当前页面索引
/// 分布大小
///
/// 是否使用WITH(NOLOCK)
///
IPageList QueryPage(Expression> predicate, Expression> orderByExpression,
OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false);
///
/// 根据条件查询分页数据
///
/// 判断集合
/// 排序方式
/// 当前页面索引
/// 分布大小
///
/// 是否使用WITH(NOLOCK)
///
Task> QueryPageAsync(Expression> predicate,
Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false);
///
/// 查询-多表查询
///
/// 实体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) 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) 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) 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) where T1 : class, new();
///
/// 查询-三表查询
///
/// 实体1
/// 实体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) where T1 : class, new();
///
/// 查询-三表查询
///
/// 实体1
/// 实体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) where T1 : class, new();
///
/// 执行sql语句并返回List
///
///
///
///
///
List SqlQuery(string sql, List parameters);
///
/// 执行sql语句并返回List
///
///
///
///
Task> SqlQueryable(string sql);
///
/// 执行调用存储过程(返回DataTable)
///
/// 存储过程名称
/// 参数
///
Task SqlQueryDataTableByStoredProcedure(string useStoredProcedureName,
List parameters);
///
/// 执行调用存储过程(返回List)
///
/// 返回类型
/// 存储过程名称
/// 参数
///
Task> SqlQueryableByStoredProcedure(string useStoredProcedureName, List parameters);
}
}