using SqlSugar; using System.Data; using System.Linq.Expressions; using static Yi.Framework.Repository.QueryParametersExtensions; /***这里面写的代码不会给覆盖,如果要重新生成请删除 Repository.cs ***/ namespace Yi.Framework.Repository { /// /// 仓储模式 /// /// public class Repository : DataContext ,IRepository where T : class, new() { /// /// 构造函数 /// /// public Repository(ISqlSugarClient context = null) : base(context)//注意这里要有默认值等于null { if (context == null) { base.Context = Db; } } public async Task InsertReturnEntityAsync(T entity) { return await Db.Insertable(entity).ExecuteReturnEntityAsync(); } /// /// whereif与where混搭,多租户 /// /// /// /// /// public async Task> GetListAsync(Expression> whereExpression, bool whereBool, Expression> where, bool isTenant = true) { return await Db.Queryable().WhereIF(whereBool, where).Where(whereExpression).WhereTenant(isTenant).ToListAsync(); } /// /// where重载,多租户 /// /// /// /// public async Task> GetListAsync(bool whereBool, Expression> where, bool isTenant = true) { return await Db.Queryable().WhereIF(whereBool, where).WhereTenant(isTenant). ToListAsync(); } /// /// 左连接,三表连接,返回最右边的列表,多租户 /// /// /// /// /// /// /// /// public async Task> LeftJoinListAsync(Expression> joinQueryable1, Expression> joinQueryable12, Expression> whereLambda, Expression> selectLambda, bool isTenant = true) { return await Db.Queryable().LeftJoin(joinQueryable1) .LeftJoin(joinQueryable12) .Where(whereLambda) .WhereTenant(isTenant) .Select(selectLambda) .ToListAsync(); } public async Task> StoreAsync(string storeName, object para) { return await Db.Ado.UseStoredProcedure().SqlQueryAsync(storeName, para); } /// /// 调用sql /// /// /// /// public async Task SqlDataTableAsync(string sql, object para = null) { return await Db.Ado.GetDataTableAsync(sql, para); } /// /// 导航属性mapper返回一个,多租户 /// /// /// /// /// public async Task FirstMapperAsync(Expression> expression,bool isTenant=true) { return await Db.Queryable().Mapper(expression).WhereTenant(isTenant).FirstAsync(); } /// /// 导航属性mapper返回一组,多租户 /// /// /// /// /// public async Task> ToListMapperAsync(Expression> expression, bool isTenant = true) { return await Db.Queryable() .Mapper(expression).WhereTenant(isTenant).ToListAsync(); } /// /// 导航属性mapper返回一组.同时添加条件,多租户 /// /// /// /// /// /// public async Task> ToListMapperAsync(Expression> expression, bool whereBool, Expression> where, bool isTenant = true) { return await Db.Queryable().Mapper(expression).WhereIF(whereBool,where).WhereTenant(isTenant).ToListAsync(); } /// /// 仓储扩展方法:单表查询通用分页 /// /// public object CommonPage(QueryParameters pars, int pageIndex, int pageSize) { int tolCount = 0; var sugarParamters = pars.Parameters.Select(it => (IConditionalModel)new ConditionalModel() { ConditionalType = it.ConditionalType, FieldName = it.FieldName, FieldValue = it.FieldValue }).ToList(); var query = Db.Queryable(); if (pars.OrderBys != null) { foreach (var item in pars.OrderBys) { query.OrderBy(item.ToSqlFilter());//格式 id asc或者 id desc } } var result = query.Where(sugarParamters).ToPageList(pageIndex, pageSize, ref tolCount); return new { count = tolCount, data = result }; } /// /// 额外添加动态条件拼接 /// /// public object CommonPage(QueryParameters pars, int pageIndex, int pageSize, bool whereBool, Expression> where) { int tolCount = 0; var sugarParamters = pars.Parameters.Select(it => (IConditionalModel)new ConditionalModel() { ConditionalType = it.ConditionalType, FieldName = it.FieldName, FieldValue = it.FieldValue }).ToList(); var query = Db.Queryable(); if (pars.OrderBys != null) { foreach (var item in pars.OrderBys) { query.OrderBy(item.ToSqlFilter());//格式 id asc或者 id desc } } var result = query.WhereIF(whereBool, where).Where(sugarParamters).ToPageList(pageIndex, pageSize, ref tolCount); return new { count = tolCount, data = result }; } /// /// 导航属性mapper分页多条件 /// /// /// /// /// public object CommonPageMapper(Expression> expression, QueryParameters pars, int pageIndex, int pageSize,bool whereBool, Expression> where) { int tolCount = 0; var sugarParamters = pars.Parameters.Select(it => (IConditionalModel)new ConditionalModel() { ConditionalType = it.ConditionalType, FieldName = it.FieldName, FieldValue = it.FieldValue }).ToList(); var query = Db.Queryable(); if (pars.OrderBys != null) { foreach (var item in pars.OrderBys) { query.OrderBy(item.ToSqlFilter());//格式 id asc或者 id desc } } var result = query.Mapper < T, T2, TT>(expression).WhereIF(whereBool, where). Where(sugarParamters).ToPageList(pageIndex, pageSize, ref tolCount); return new { count = tolCount, data = result }; } } /// /// 通用查询参数 /// public class QueryParameters { public List Parameters { get; set; } = new List(); public List OrderBys { get; set; } = new List(); } public static class QueryParametersExtensions { public static ISugarQueryable WhereTenant(this ISugarQueryable db, bool isTenant = true) { if (isTenant) { var sugarParamters = new QueryParameters().SetParameters(new Dictionary()).Parameters.Select(it => (IConditionalModel)new ConditionalModel() { ConditionalType = it.ConditionalType, FieldName = it.FieldName, FieldValue = it.FieldValue }).ToList(); return db.Where(sugarParamters); } return db; } public static ISugarQueryable WhereTenant(this ISugarQueryable db, bool isTenant = true) { if (isTenant) { var sugarParamters = new QueryParameters().SetParameters(new Dictionary()).Parameters.Select(it => (IConditionalModel)new ConditionalModel() { ConditionalType = it.ConditionalType, FieldName = it.FieldName, FieldValue = it.FieldValue }).ToList(); return db.Where(sugarParamters); } return db; } public static QueryParameters SetParameters(this QueryParameters queryParameters, Dictionary dic,bool IsTenant=true) { //var httpcontext = ServiceLocator.Instance.GetService().HttpContext; queryParameters.OrderBys = new List { "CreateTime" }; foreach (var p in dic) { QueryParameter qp = null; if (p.Key == "IsDeleted" || p.Key=="Id") { qp= new QueryParameter() { FieldName = p.Key, FieldValue = p.Value, ConditionalType = ConditionalType.Equal }; } else { qp= new QueryParameter() { FieldName = p.Key, FieldValue = p.Value }; } queryParameters.Parameters.Add(qp); } if (IsTenant) { //if (httpcontext.Request.Headers["TenantLevel"].ToString() == "0") //{ // queryParameters.Parameters.Add(new QueryParameter() { ConditionalType = ConditionalType.Equal, FieldName = "TenantId", FieldValue = httpcontext.Request.Headers["TenantId"].ToString() }); //} } return queryParameters; } /// /// 通用查询参数 /// public class QueryParameter { public string FieldName { get; set; } public string FieldValue { get; set; } public ConditionalType ConditionalType { get; set; } = ConditionalType.Like; } } }