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;
}
}
}