using SqlSugar; using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace System.Common { public class BaseMysqlRepository : BaseMysqlContext, IRepository where T : class, new() { //public SimpleClient CurrentDB => new SimpleClient(Db); /// /// 获取数量 /// /// /// public async Task GetCount(Expression> whereExpression = null) { if (whereExpression != null) return await Db.Queryable().With(SqlWith.NoLock).CountAsync(whereExpression); else return await Db.Queryable().With(SqlWith.NoLock).CountAsync(); } /// /// 获取所有 /// /// public async Task> GetList() { return await Db.Queryable().With(SqlWith.NoLock).ToListAsync(); //return CurrentCurrentDB.GetList(); } public async Task> GetListALL(Expression> whereExpression) { return await Db.Queryable().With(SqlWith.NoLock).Where(whereExpression).ToListAsync(); } public async Task> GetListALL(List conModels, string orderby) { return await Db.Queryable().With(SqlWith.NoLock).Where(conModels).OrderBy(orderby).ToListAsync(); } public async Task> GetListALL(Expression> whereExpression, Expression> orderExpression, OrderByType ordertype = OrderByType.Asc) { return await Db.Queryable().With(SqlWith.NoLock).Where(whereExpression).OrderBy(orderExpression, ordertype).ToListAsync(); } /// /// 分页获取所有 /// /// /// /// public async Task> GetListByPage(List conModels, MyPageModel pagemodel, string orderby) { var list = await Db.Queryable().With(SqlWith.NoLock).Where(conModels).OrderBy(orderby).ToPageListAsync(pagemodel.PageIndex, pagemodel.PageSize, pagemodel.PageCount); PageData pd = new PageData(); pd.Rows = list; pd.Totals = pagemodel.PageCount; return pd;// CurrentCurrentDB.GetPageList(conModels, pagemodel); } public async Task> GetListByPage(List conModels, MyPageModel pagemodel) { var list = await Db.Queryable().With(SqlWith.NoLock).Where(conModels).ToPageListAsync(pagemodel.PageIndex, pagemodel.PageSize, pagemodel.PageCount); PageData pd = new PageData(); pd.Rows = list; pd.Totals = pagemodel.PageCount; return pd;// CurrentCurrentDB.GetPageList(conModels, pagemodel); } public async Task> GetListByPage(Expression> whereExpression, MyPageModel pagemodel) { var list = await Db.Queryable().With(SqlWith.NoLock).Where(whereExpression).ToPageListAsync(pagemodel.PageIndex, pagemodel.PageSize, pagemodel.PageCount); PageData pd = new PageData(); pd.Rows = list; pd.Totals = pagemodel.PageCount; return pd;// CurrentCurrentDB.GetPageList(conModels, pagemodel); } public async Task> GetListByPage(Expression> whereExpression, MyPageModel pagemodel, string orderby) { var list = await Db.Queryable().With(SqlWith.NoLock).Where(whereExpression).OrderBy(orderby).ToPageListAsync(pagemodel.PageIndex, pagemodel.PageSize, pagemodel.PageCount); PageData pd = new PageData(); pd.Rows = list; pd.Totals = pagemodel.PageCount; return pd;// CurrentCurrentDB.GetPageList(conModels, pagemodel); } public async Task GetSingle(Expression> whereExpression) { //FirstAsync替换SingleAsync 保证正常运行,但是可能结果会不一样。 return await Db.Queryable().With(SqlWith.NoLock).Where(whereExpression).SingleAsync(); //return CurrentCurrentDB.GetSingle(whereExpression); } public async Task GetFirst(Expression> whereExpression, Expression> expression = null, OrderByType type = OrderByType.Asc) { //FirstAsync替换SingleAsync 保证正常运行,但是可能结果会不一样。 if (expression == null) return await Db.Queryable().With(SqlWith.NoLock).Where(whereExpression).FirstAsync(); else return await Db.Queryable().With(SqlWith.NoLock).Where(whereExpression).OrderBy(expression, type).FirstAsync(); //return CurrentCurrentDB.GetSingle(whereExpression); } /// /// 添加 /// /// /// public async Task Add(T obj) { return await Db.Insertable(obj).ExecuteReturnIdentityAsync(); //return CurrentCurrentDB.InsertReturnIdentity(obj); } /// /// 插入并返回实体 /// /// /// 更新字段 null全部 /// public async Task AddAndUpdate(T obj, Expression> UpdateColumns = null) { if (UpdateColumns == null) return await Db.Saveable(obj).ExecuteReturnEntityAsync(); else return await Db.Saveable(obj).UpdateColumns(UpdateColumns).ExecuteReturnEntityAsync(); } /// /// 插入并返回实体 /// /// 更新插入实体 /// 更新字段 null全部 /// public async Task AddAndUpdateList(List obj, Expression> UpdateColumns = null) { if (UpdateColumns == null) return await Db.Saveable(obj).ExecuteReturnEntityAsync(); else return await Db.Saveable(obj).UpdateColumns(UpdateColumns).ExecuteReturnEntityAsync(); } /// /// 插入并返回影响行数 /// /// /// public async Task AddReturnCount(T obj) { int res = await Db.Insertable(obj).ExecuteCommandAsync(); return res > 0; } /// /// 添加排除某列 /// /// /// public async Task AddIgnore(T obj, Expression> IgnoreColumns) { return await Db.Insertable(obj).IgnoreColumns(IgnoreColumns).ExecuteReturnIdentityAsync(); //return CurrentCurrentDB.InsertReturnIdentity(obj); } /// /// 强势插入,插入自增值 /// /// /// 是否强势 /// public async Task AddStrong(T obj, bool isStrong = false) { return await Db.Insertable(obj).IgnoreColumns(true, isStrong).ExecuteReturnIdentityAsync(); //return CurrentCurrentDB.InsertReturnIdentity(obj); } /// /// 批量添加 /// /// /// public async Task AddMany(List objlist) { var res = await Db.Insertable(objlist).ExecuteCommandAsync(); return res > 0; } /// /// 根据条件删除 /// /// public async Task Delete(Expression> whereExpression) { return await Db.Deleteable(whereExpression).ExecuteCommandHasChangeAsync(); //return CurrentCurrentDB.Delete(whereExpression); } /// /// 实体更新 /// /// /// public async Task Update(T obj) { return await Db.Updateable(obj).ExecuteCommandHasChangeAsync(); //return CurrentCurrentDB.Update(obj); } /// /// 条件更新 不传对象写法 表要有主键 /// /// /// 【q=>q.Id='aaa'】成功 【q=>ids.Contains(q.Id)】接口工具测线上失败 线上直接调接口成功 ids=aaa,bbb ids数组才可解析成in /// public async Task Update(Expression> UpdateColumnsExpression, Expression> whereExpression) { //KeyValuePair> sql = Db.Updateable().SetColumns(UpdateColumnsExpression).Where(whereExpression).ToSql(); //string sqlkey = sql.Key; //List sqllist = sql.Value; //foreach (SugarParameter s in sqllist) //{ // string a= s.Value.ToString(); // string b = s.ParameterName.ToString(); //} return await Db.Updateable().SetColumns(UpdateColumnsExpression).Where(whereExpression).ExecuteCommandHasChangeAsync(); //return CurrentCurrentDB.Update(obj); } /// /// 批量整条更新 /// /// /// public async Task UpdateList(List obj) { return await Db.Updateable(obj).ExecuteCommandHasChangeAsync(); //return CurrentCurrentDB.Update(obj); } public async Task GetTableSugar(string sql, SugarParameter[] sugarParameter = null) { if (sugarParameter == null) { return await Db.Ado.GetDataTableAsync(sql); } else { return await Db.Ado.GetDataTableAsync(sql, sugarParameter); } } public async Task ExecuteCommandSugar(string sql, SugarParameter[] sugarParameter = null) { if (sugarParameter == null) { return await Db.Ado.ExecuteCommandAsync(sql); } else { return await Db.Ado.ExecuteCommandAsync(sql, sugarParameter); } } /// /// 批量指定字段更新 传对象写法 /// /// model => new { model.Name } /// [Obsolete] public async Task UpdateListToColumns(List obj, Expression> objColumns) { return await Db.Updateable(obj).UpdateColumns(objColumns).ExecuteCommandHasChangeAsync(); //return CurrentCurrentDB.Update(obj); } } }