using JiepeiWMS.Common;
|
using JiepeiWMS.Common.DB;
|
using JiepeiWMS.IRepository.Base;
|
using JiepeiWMS.IRepository.UnitOfWork;
|
using JiepeiWMS.Model;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Linq.Expressions;
|
using System.Threading.Tasks;
|
|
namespace JiepeiWMS.Repository.Base
|
{
|
public class BaseRepository<T> : IBaseRepository<T> where T : class, new()
|
{
|
private readonly IUnitOfWork _unitOfWork;
|
private SqlSugarClient _dbBase;
|
|
private ISqlSugarClient _db
|
{
|
get
|
{
|
/* 如果要开启多库支持,
|
* 1、在appsettings.json 中开启MutiDBEnabled节点为true,必填
|
* 2、设置一个主连接的数据库ID,节点MainDB,对应的连接字符串的Enabled也必须true,必填
|
*/
|
if (Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool())
|
{
|
if (typeof(T).GetTypeInfo().GetCustomAttributes(typeof(SugarTable), true).FirstOrDefault((x => x.GetType() == typeof(SugarTable))) is SugarTable sugarTable && !string.IsNullOrEmpty(sugarTable.TableDescription))
|
{
|
_dbBase.ChangeDatabase(sugarTable.TableDescription.ToLower());
|
}
|
else
|
{
|
_dbBase.ChangeDatabase(MainDb.CurrentDbConnId.ToLower());
|
}
|
}
|
|
return _dbBase;
|
}
|
}
|
|
internal ISqlSugarClient Db
|
{
|
get { return _db; }
|
}
|
|
public BaseRepository(IUnitOfWork unitOfWork)
|
{
|
_unitOfWork = unitOfWork;
|
_dbBase = unitOfWork.GetDbClient();
|
}
|
|
|
|
public async Task<T> QueryById(object objId)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().InSingle(objId));
|
return await _db.Queryable<T>().In(objId).SingleAsync();
|
}
|
|
/// <summary>
|
/// 返回一个数据模型
|
/// </summary>
|
/// <typeparam name="T"></typeparam>
|
/// <param name="where"></param>
|
/// <returns></returns>
|
public async Task<T> GetModel(Expression<Func<T, bool>> where)
|
{
|
return await _db.Queryable<T>().Where(where).FirstAsync();
|
|
}
|
/// <summary>
|
/// 功能描述:根据ID查询一条数据
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="objId">id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
|
/// <param name="blnUseCache">是否使用缓存</param>
|
/// <returns>数据实体</returns>
|
public async Task<T> QueryById(object objId, bool blnUseCache = false)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().WithCacheIF(blnUseCache).InSingle(objId));
|
return await _db.Queryable<T>().WithCacheIF(blnUseCache).In(objId).SingleAsync();
|
}
|
|
/// <summary>
|
/// 功能描述:根据ID查询数据
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="lstIds">id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
|
/// <returns>数据实体列表</returns>
|
public async Task<List<T>> QueryByIDs(object[] lstIds)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().In(lstIds).ToList());
|
return await _db.Queryable<T>().In(lstIds).ToListAsync();
|
}
|
|
/// <summary>
|
/// 写入实体数据
|
/// </summary>
|
/// <param name="entity">博文实体类</param>
|
/// <returns></returns>
|
public async Task<int> Add(T entity)
|
{
|
//var i = await Task.Run(() => _db.Insertable(entity).ExecuteReturnBigIdentity());
|
////返回的i是long类型,这里你可以根据你的业务需要进行处理
|
//return (int)i;
|
|
var insert = _db.Insertable(entity);
|
return await insert.ExecuteReturnIdentityAsync();
|
}
|
|
|
/// <summary>
|
/// 写入实体数据
|
/// </summary>
|
/// <param name="entity">实体类</param>
|
/// <param name="insertColumns">指定只插入列</param>
|
/// <returns>返回自增量列</returns>
|
public async Task<int> Add(T entity, Expression<Func<T, object>> insertColumns = null)
|
{
|
var insert = _db.Insertable(entity);
|
if (insertColumns == null)
|
{
|
return await insert.ExecuteReturnIdentityAsync();
|
}
|
else
|
{
|
return await insert.InsertColumns(insertColumns).ExecuteReturnIdentityAsync();
|
}
|
}
|
|
/// <summary>
|
/// 批量插入实体(速度快)
|
/// </summary>
|
/// <param name="listEntity">实体集合</param>
|
/// <returns>影响行数</returns>
|
public async Task<int> Add(List<T> listEntity)
|
{
|
return await _db.Insertable(listEntity.ToArray()).ExecuteCommandAsync();
|
}
|
|
/// <summary>
|
/// 更新实体数据
|
/// </summary>
|
/// <param name="entitys">博文实体类</param>
|
/// <returns></returns>
|
public async Task<bool> Update(params T[] entitys)
|
{
|
////这种方式会以主键为条件
|
//var i = await Task.Run(() => _db.Updateable(entity).ExecuteCommand());
|
//return i > 0;
|
//这种方式会以主键为条件
|
return await _db.Updateable(entitys).ExecuteCommandHasChangeAsync();
|
}
|
|
public async Task<bool> Update(T entity, string strWhere)
|
{
|
//return await Task.Run(() => _db.Updateable(entity).Where(strWhere).ExecuteCommand() > 0);
|
return await _db.Updateable(entity).Where(strWhere).ExecuteCommandHasChangeAsync();
|
}
|
|
public async Task<bool> Update(string strSql, SugarParameter[] parameters = null)
|
{
|
//return await Task.Run(() => _db.Ado.ExecuteCommand(strSql, parameters) > 0);
|
return await _db.Ado.ExecuteCommandAsync(strSql, parameters) > 0;
|
}
|
|
public async Task<bool> Update(object operateAnonymousObjects)
|
{
|
return await _db.Updateable<T>(operateAnonymousObjects).ExecuteCommandAsync() > 0;
|
}
|
|
public async Task<bool> Update(
|
T entity,
|
List<string> lstColumns = null,
|
List<string> lstIgnoreColumns = null,
|
string strWhere = ""
|
)
|
{
|
//IUpdateable<TEntity> up = await Task.Run(() => _db.Updateable(entity));
|
//if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
|
//{
|
// up = await Task.Run(() => up.IgnoreColumns(it => lstIgnoreColumns.Contains(it)));
|
//}
|
//if (lstColumns != null && lstColumns.Count > 0)
|
//{
|
// up = await Task.Run(() => up.UpdateColumns(it => lstColumns.Contains(it)));
|
//}
|
//if (!string.IsNullOrEmpty(strWhere))
|
//{
|
// up = await Task.Run(() => up.Where(strWhere));
|
//}
|
//return await Task.Run(() => up.ExecuteCommand()) > 0;
|
|
IUpdateable<T> up = _db.Updateable(entity);
|
if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
|
{
|
up = up.IgnoreColumns(lstIgnoreColumns.ToArray());
|
}
|
if (lstColumns != null && lstColumns.Count > 0)
|
{
|
up = up.UpdateColumns(lstColumns.ToArray());
|
}
|
if (!string.IsNullOrEmpty(strWhere))
|
{
|
up = up.Where(strWhere);
|
}
|
return await up.ExecuteCommandHasChangeAsync();
|
}
|
|
/// <summary>
|
/// 根据实体删除一条数据
|
/// </summary>
|
/// <param name="entity">博文实体类</param>
|
/// <returns></returns>
|
public async Task<bool> Delete(T entity)
|
{
|
//var i = await Task.Run(() => _db.Deleteable(entity).ExecuteCommand());
|
//return i > 0;
|
return await _db.Deleteable(entity).ExecuteCommandHasChangeAsync();
|
}
|
|
/// <summary>
|
/// 删除指定ID的数据
|
/// </summary>
|
/// <param name="id">主键ID</param>
|
/// <returns></returns>
|
public async Task<bool> DeleteById(object id)
|
{
|
//var i = await Task.Run(() => _db.Deleteable<TEntity>(id).ExecuteCommand());
|
//return i > 0;
|
return await _db.Deleteable<T>(id).ExecuteCommandHasChangeAsync();
|
}
|
|
/// <summary>
|
/// 删除指定ID集合的数据(批量删除)
|
/// </summary>
|
/// <param name="ids">主键ID集合</param>
|
/// <returns></returns>
|
public async Task<bool> DeleteByIds(object[] ids)
|
{
|
//var i = await Task.Run(() => _db.Deleteable<TEntity>().In(ids).ExecuteCommand());
|
//return i > 0;
|
return await _db.Deleteable<T>().In(ids).ExecuteCommandHasChangeAsync();
|
}
|
|
|
|
/// <summary>
|
/// 功能描述:查询所有数据
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <returns>数据列表</returns>
|
public async Task<List<T>> Query()
|
{
|
return await _db.Queryable<T>().ToListAsync();
|
}
|
|
|
|
/// <summary>
|
/// 功能描述:查询数据列表
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="strWhere">条件</param>
|
/// <returns>数据列表</returns>
|
public async Task<List<T>> Query(string strWhere)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList());
|
return await _db.Queryable<T>().WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToListAsync();
|
}
|
|
/// <summary>
|
/// 功能描述:查询数据列表
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="whereExpression">whereExpression</param>
|
/// <returns>数据列表</returns>
|
public async Task<List<T>> Query(Expression<Func<T, bool>> whereExpression)
|
{
|
return await _db.Queryable<T>().WhereIF(whereExpression != null, whereExpression).ToListAsync();
|
}
|
|
/// <summary>
|
/// 功能描述:查询一个列表
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="whereExpression">条件表达式</param>
|
/// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
|
/// <returns>数据列表</returns>
|
public async Task<List<T>> Query(Expression<Func<T, bool>> whereExpression, string strOrderByFileds)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToList());
|
return await _db.Queryable<T>().WhereIF(whereExpression != null, whereExpression).OrderByIF(strOrderByFileds != null, strOrderByFileds).ToListAsync();
|
}
|
/// <summary>
|
/// 功能描述:查询一个列表
|
/// </summary>
|
/// <param name="whereExpression"></param>
|
/// <param name="orderByExpression"></param>
|
/// <param name="isAsc"></param>
|
/// <returns></returns>
|
public async Task<List<T>> Query(Expression<Func<T, bool>> whereExpression, Expression<Func<T, object>> orderByExpression, bool isAsc = true)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToList());
|
return await _db.Queryable<T>().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToListAsync();
|
}
|
|
/// <summary>
|
/// 功能描述:查询一个列表
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="strWhere">条件</param>
|
/// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
|
/// <returns>数据列表</returns>
|
public async Task<List<T>> Query(string strWhere, string strOrderByFileds)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList());
|
return await _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToListAsync();
|
}
|
|
|
/// <summary>
|
/// 功能描述:查询前N条数据
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="whereExpression">条件表达式</param>
|
/// <param name="intTop">前N条</param>
|
/// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
|
/// <returns>数据列表</returns>
|
public async Task<List<T>> Query(
|
Expression<Func<T, bool>> whereExpression,
|
int intTop,
|
string strOrderByFileds)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).Take(intTop).ToList());
|
return await _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).Take(intTop).ToListAsync();
|
}
|
|
/// <summary>
|
/// 功能描述:查询前N条数据
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="strWhere">条件</param>
|
/// <param name="intTop">前N条</param>
|
/// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
|
/// <returns>数据列表</returns>
|
public async Task<List<T>> Query(
|
string strWhere,
|
int intTop,
|
string strOrderByFileds)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).Take(intTop).ToList());
|
return await _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).Take(intTop).ToListAsync();
|
}
|
|
/// <summary>
|
/// 根据sql语句查询
|
/// </summary>
|
/// <param name="strSql">完整的sql语句</param>
|
/// <param name="parameters">参数</param>
|
/// <returns>泛型集合</returns>
|
public async Task<List<T>> QuerySql(string strSql, SugarParameter[] parameters = null)
|
{
|
return await _db.Ado.SqlQueryAsync<T>(strSql, parameters);
|
}
|
|
/// <summary>
|
/// 根据sql语句查询
|
/// </summary>
|
/// <param name="strSql">完整的sql语句</param>
|
/// <param name="parameters">参数</param>
|
/// <returns></returns>
|
public int ExecuteSqlCommand(string strSql, SugarParameter[] parameters = null)
|
{
|
return _db.Ado.ExecuteCommand(strSql, parameters);
|
}
|
|
/// <summary>
|
/// 根据sql语句查询
|
/// </summary>
|
/// <param name="strSql">完整的sql语句</param>
|
/// <param name="parameters">参数</param>
|
/// <returns>DataTable</returns>
|
public async Task<DataTable> QueryTable(string strSql, SugarParameter[] parameters = null)
|
{
|
return await _db.Ado.GetDataTableAsync(strSql, parameters);
|
}
|
|
/// <summary>
|
/// 根据sql语句查询DataSet集合
|
/// </summary>
|
/// <param name="strSql">完整的sql语句</param>
|
/// <param name="parameters">参数</param>
|
/// <returns>DataTable</returns>
|
public async Task<DataSet> QueryTableSet(string strSql, SugarParameter[] parameters = null)
|
{
|
return await _db.Ado.GetDataSetAllAsync(strSql, parameters);
|
}
|
|
|
|
/// <summary>
|
/// 功能描述:分页查询
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="whereExpression">条件表达式</param>
|
/// <param name="intPageIndex">页码(下标0)</param>
|
/// <param name="intPageSize">页大小</param>
|
/// <param name="intTotalCount">数据总量</param>
|
/// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
|
/// <returns>数据列表</returns>
|
public async Task<List<T>> Query(
|
Expression<Func<T, bool>> whereExpression,
|
int intPageIndex,
|
int intPageSize,
|
string strOrderByFileds)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToPageList(intPageIndex, intPageSize));
|
return await _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToPageListAsync(intPageIndex, intPageSize);
|
}
|
|
/// <summary>
|
/// 功能描述:分页查询
|
/// 作 者:JiepeiWMS
|
/// </summary>
|
/// <param name="strWhere">条件</param>
|
/// <param name="intPageIndex">页码(下标0)</param>
|
/// <param name="intPageSize">页大小</param>
|
/// <param name="intTotalCount">数据总量</param>
|
/// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
|
/// <returns>数据列表</returns>
|
public async Task<List<T>> Query(
|
string strWhere,
|
int intPageIndex,
|
int intPageSize,
|
|
string strOrderByFileds)
|
{
|
//return await Task.Run(() => _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToPageList(intPageIndex, intPageSize));
|
return await _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToPageListAsync(intPageIndex, intPageSize);
|
}
|
|
|
|
/// <summary>
|
/// 分页查询[使用版本,其他分页未测试]
|
/// </summary>
|
/// <param name="whereExpression">条件表达式</param>
|
/// <param name="intPageIndex">页码(下标0)</param>
|
/// <param name="intPageSize">页大小</param>
|
/// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
|
/// <returns></returns>
|
public async Task<PageModel<T>> QueryPage(Expression<Func<T, bool>> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null)
|
{
|
|
RefAsync<int> totalCount = 0;
|
var list = await _db.Queryable<T>()
|
.OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
|
.WhereIF(whereExpression != null, whereExpression)
|
.ToPageListAsync(intPageIndex, intPageSize, totalCount);
|
|
int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intPageSize.ObjToDecimal())).ObjToInt();
|
return new PageModel<T>() { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list };
|
}
|
|
/// <summary>
|
/// 分页查询[使用版本,其他分页未测试]
|
/// </summary>
|
/// <param name="joinExpression">关联表达式 (join1,join2) => new object[] {JoinType.Left,join1.UserNo==join2.UserNo}</param>
|
/// <param name="selectExpression">返回表达式 (s1, s2) => new { Id =s1.UserNo, Id1 = s2.UserNo}</param>
|
/// <param name="whereExpression">查询表达式 (w1, w2) =>w1.UserNo == "")</param>
|
/// <param name="intPageIndex">页码(下标0)</param>
|
/// <param name="intPageSize">页大小</param>
|
/// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
|
/// <returns></returns>
|
public async Task<PageModel<T>> QueryPage<T, T2>(Expression<Func<T, T2, object[]>> joinExpression,
|
Expression<Func<T, T2, T>> selectExpression,
|
Expression<Func<T, T2, bool>> whereExpression,
|
int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) where T : class, new()
|
{
|
RefAsync<int> totalCount = 0;
|
List<T> lst;
|
|
if (whereExpression == null)
|
{
|
lst = await _db.Queryable(joinExpression).Select(selectExpression).ToPageListAsync(intPageIndex, intPageSize, totalCount);
|
}
|
else
|
{
|
lst = await _db.Queryable(joinExpression).Where(whereExpression).Select(selectExpression).ToPageListAsync(intPageIndex, intPageSize, totalCount);
|
}
|
|
int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intPageSize.ObjToDecimal())).ObjToInt();
|
return new PageModel<T>() { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = lst };
|
}
|
|
#region 5表关联
|
/// <summary>
|
/// 五表联合查询-分页
|
/// </summary>
|
/// <typeparam name="T">实体1</typeparam>
|
/// <typeparam name="T2">实体1</typeparam>
|
/// <typeparam name="T3">实体1</typeparam>
|
/// <typeparam name="T4">实体1</typeparam>
|
/// <typeparam name="T5">实体1</typeparam>
|
/// <typeparam name="TResult">返回对象</typeparam>
|
/// <param name="JoinExpression">关联表达式</param>
|
/// <param name="SelectExpression">返回表达式</param>
|
/// <param name="WhereExpression">查询表达式</param>
|
/// <param name="PageIndex">页码</param>
|
/// <param name="PageSize">页大小</param>
|
/// <param name="OrderByFileds">排序字段</param>
|
/// <returns></returns>
|
public async Task<PageModel<TResult>> QueryPage<T1, T2, T3, T4, T5, TResult>(
|
Expression<Func<T1, T2, T3, T4, T5, object[]>> JoinExpression,
|
Expression<Func<T1, T2, T3, T4, T5, TResult>> SelectExpression,
|
Expression<Func<T1, T2, T3, T4, T5, bool>> WhereExpression,
|
int PageIndex = 1,
|
int PageSize = 20,
|
string OrderByFileds = null)
|
{
|
|
RefAsync<int> totalCount = 0;
|
var list = await _db.Queryable<T1, T2, T3, T4, T5>(JoinExpression)
|
.Where(WhereExpression)
|
.Select(SelectExpression)
|
.OrderByIF(!string.IsNullOrEmpty(OrderByFileds), OrderByFileds)
|
.ToPageListAsync(PageIndex, PageSize, totalCount);
|
int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / PageSize.ObjToDecimal())).ObjToInt();
|
return new PageModel<TResult>() { dataCount = totalCount, pageCount = pageCount, page = PageIndex, PageSize = PageSize, data = list };
|
}
|
#endregion
|
#region 6表关联
|
/// <summary>
|
/// 五表联合查询-分页
|
/// </summary>
|
/// <typeparam name="T">实体1</typeparam>
|
/// <typeparam name="T2">实体1</typeparam>
|
/// <typeparam name="T3">实体1</typeparam>
|
/// <typeparam name="T4">实体1</typeparam>
|
/// <typeparam name="T5">实体1</typeparam>
|
/// <typeparam name="T6">实体1</typeparam>
|
/// <typeparam name="TResult">返回对象</typeparam>
|
/// <param name="JoinExpression">关联表达式</param>
|
/// <param name="SelectExpression">返回表达式</param>
|
/// <param name="WhereExpression">查询表达式</param>
|
/// <param name="PageIndex">页码</param>
|
/// <param name="PageSize">页大小</param>
|
/// <param name="OrderByFileds">排序字段</param>
|
/// <returns></returns>
|
public async Task<PageModel<TResult>> QueryPage<T1, T2, T3, T4, T5, T6, TResult>(
|
Expression<Func<T1, T2, T3, T4, T5, T6, object[]>> JoinExpression,
|
Expression<Func<T1, T2, T3, T4, T5, T6, TResult>> SelectExpression,
|
Expression<Func<T1, T2, T3, T4, T5, T6, bool>> WhereExpression,
|
int PageIndex = 1,
|
int PageSize = 20,
|
string OrderByFileds = null)
|
{
|
|
RefAsync<int> totalCount = 0;
|
var list = await _db.Queryable<T1, T2, T3, T4, T5, T6>(JoinExpression)
|
.Where(WhereExpression)
|
.Select(SelectExpression)
|
.OrderByIF(!string.IsNullOrEmpty(OrderByFileds), OrderByFileds)
|
.ToPageListAsync(PageIndex, PageSize, totalCount);
|
int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / PageSize.ObjToDecimal())).ObjToInt();
|
return new PageModel<TResult>() { dataCount = totalCount, pageCount = pageCount, page = PageIndex, PageSize = PageSize, data = list };
|
}
|
#endregion
|
/// <summary>
|
///查询-多表查询 add by wyb 2020/8/19
|
/// </summary>
|
/// <typeparam name="T">实体1</typeparam>
|
/// <typeparam name="T2">实体2</typeparam>
|
/// <typeparam name="T3">实体3</typeparam>
|
/// <typeparam name="TResult">返回对象</typeparam>
|
/// <param name="joinExpression">关联表达式 (join1,join2) => new object[] {JoinType.Left,join1.UserNo==join2.UserNo}</param>
|
/// <param name="selectExpression">返回表达式 (s1, s2) => new { Id =s1.UserNo, Id1 = s2.UserNo}</param>
|
/// <param name="whereLambda">查询表达式 (w1, w2) =>w1.UserNo == "")</param>
|
/// <returns>值</returns>
|
public async Task<List<TResult>> QueryMuch<T, T2, T3, TResult>(
|
Expression<Func<T, T2, T3, object[]>> joinExpression,
|
Expression<Func<T, T2, T3, TResult>> selectExpression,
|
Expression<Func<T, T2, T3, bool>> whereLambda = null) where T : class, new()
|
{
|
if (whereLambda == null)
|
{
|
return await _db.Queryable(joinExpression).Select(selectExpression).ToListAsync();
|
}
|
return await _db.Queryable(joinExpression).Where(whereLambda).Select(selectExpression).ToListAsync();
|
}
|
/// <summary>
|
/// 查询-多表查询 add by wyb 2020/8/19
|
/// </summary>
|
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T2"></typeparam>
|
/// <typeparam name="T3"></typeparam>
|
/// <typeparam name="T4"></typeparam>
|
/// <typeparam name="TResult"></typeparam>
|
/// <param name="joinExpression"></param>
|
/// <param name="selectExpression"></param>
|
/// <param name="whereLambda"></param>
|
/// <returns></returns>
|
public async Task<List<TResult>> QueryMuch<T, T2, T3, T4, TResult>(
|
Expression<Func<T, T2, T3, T4, object[]>> joinExpression,
|
Expression<Func<T, T2, T3, T4, TResult>> selectExpression,
|
Expression<Func<T, T2, T3, T4, bool>> whereLambda = null) where T : class, new()
|
{
|
if (whereLambda == null)
|
{
|
return await _db.Queryable(joinExpression).Select(selectExpression).ToListAsync();
|
}
|
return await _db.Queryable(joinExpression).Where(whereLambda).Select(selectExpression).ToListAsync();
|
}
|
|
/// <summary>
|
/// 两表联合查询-分页 add by wyb 2020/8/19
|
/// </summary>
|
/// <typeparam name="T">实体1</typeparam>
|
/// <typeparam name="T2">实体1</typeparam>
|
/// <typeparam name="TResult">返回对象</typeparam>
|
/// <param name="joinExpression">关联表达式</param>
|
/// <param name="selectExpression">返回表达式</param>
|
/// <param name="whereExpression">查询表达式</param>
|
/// <param name="intPageIndex">页码</param>
|
/// <param name="intPageSize">页大小</param>
|
/// <param name="strOrderByFileds">排序字段</param>
|
/// <returns></returns>
|
public async Task<PageModel<TResult>> QueryTabsPage<T, T2, TResult>(
|
Expression<Func<T, T2, object[]>> joinExpression,
|
Expression<Func<T, T2, TResult>> selectExpression,
|
Expression<Func<TResult, bool>> whereExpression,
|
int intPageIndex = 1,
|
int intPageSize = 20,
|
string strOrderByFileds = null)
|
{
|
|
RefAsync<int> totalCount = 0;
|
var list = await _db.Queryable<T, T2>(joinExpression)
|
.Select(selectExpression)
|
.OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
|
.WhereIF(whereExpression != null, whereExpression)
|
.ToPageListAsync(intPageIndex, intPageSize, totalCount);
|
int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intPageSize.ObjToDecimal())).ObjToInt();
|
return new PageModel<TResult>() { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list };
|
}
|
|
/// <summary>
|
/// 两表联合查询-分页-分组 add by wyb 2020/8/19
|
/// </summary>
|
/// <typeparam name="T">实体1</typeparam>
|
/// <typeparam name="T2">实体1</typeparam>
|
/// <typeparam name="TResult">返回对象</typeparam>
|
/// <param name="joinExpression">关联表达式</param>
|
/// <param name="selectExpression">返回表达式</param>
|
/// <param name="whereExpression">查询表达式</param>
|
/// <param name="intPageIndex">页码</param>
|
/// <param name="intPageSize">页大小</param>
|
/// <param name="strOrderByFileds">排序字段</param>
|
/// <returns></returns>
|
public async Task<PageModel<TResult>> QueryTabsPage<T, T2, TResult>(
|
Expression<Func<T, T2, object[]>> joinExpression,
|
Expression<Func<T, T2, TResult>> selectExpression,
|
Expression<Func<TResult, bool>> whereExpression,
|
Expression<Func<T, object>> groupExpression,
|
int intPageIndex = 1,
|
int intPageSize = 20,
|
string strOrderByFileds = null)
|
{
|
|
RefAsync<int> totalCount = 0;
|
var list = await _db.Queryable<T, T2>(joinExpression).GroupBy(groupExpression)
|
.Select(selectExpression)
|
.OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
|
.WhereIF(whereExpression != null, whereExpression)
|
.ToPageListAsync(intPageIndex, intPageSize, totalCount);
|
int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intPageSize.ObjToDecimal())).ObjToInt();
|
return new PageModel<TResult>() { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list };
|
}
|
/// <summary>
|
/// 三表联合查询-分页 add by wyb 2020/8/19
|
/// </summary>
|
/// <typeparam name="T">实体</typeparam>
|
/// <typeparam name="T2">实体</typeparam>
|
/// <typeparam name="T3">实体</typeparam>
|
/// <typeparam name="TResult">返回对象</typeparam>
|
/// <param name="joinExpression">关联表达式</param>
|
/// <param name="selectExpression">返回表达式</param>
|
/// <param name="whereExpression">查询表达式</param>
|
/// <param name="intPageIndex">页码</param>
|
/// <param name="intPageSize">页大小</param>
|
/// <param name="strOrderByFileds">排序字段</param>
|
/// <returns></returns>
|
public async Task<PageModel<TResult>> QueryTabsPage<T, T2, T3, TResult>(
|
Expression<Func<T, T2, T3, object[]>> joinExpression,
|
Expression<Func<T, T2, T3, TResult>> selectExpression,
|
Expression<Func<TResult, bool>> whereExpression,
|
int intPageIndex = 1,
|
int intPageSize = 20,
|
string strOrderByFileds = null)
|
{
|
|
RefAsync<int> totalCount = 0;
|
var list = await _db.Queryable<T, T2, T3>(joinExpression)
|
.Select(selectExpression)
|
.OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
|
.WhereIF(whereExpression != null, whereExpression)
|
.ToPageListAsync(intPageIndex, intPageSize, totalCount);
|
int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intPageSize.ObjToDecimal())).ObjToInt();
|
return new PageModel<TResult>() { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list };
|
}
|
|
/// <summary>
|
/// 四表联合查询-分页 add by wyb 2020/8/19
|
/// </summary>
|
/// <typeparam name="T">实体1</typeparam>
|
/// <typeparam name="T2">实体1</typeparam>
|
/// <typeparam name="T3">实体1</typeparam>
|
/// <typeparam name="T4">实体1</typeparam>
|
/// <typeparam name="TResult">返回对象</typeparam>
|
/// <param name="joinExpression">关联表达式</param>
|
/// <param name="selectExpression">返回表达式</param>
|
/// <param name="whereExpression">查询表达式</param>
|
/// <param name="intPageIndex">页码</param>
|
/// <param name="intPageSize">页大小</param>
|
/// <param name="strOrderByFileds">排序字段</param>
|
/// <returns></returns>
|
public async Task<PageModel<TResult>> QueryTabsPage<T, T2, T3, T4, TResult>(
|
Expression<Func<T, T2, T3, T4, object[]>> joinExpression,
|
Expression<Func<T, T2, T3, T4, TResult>> selectExpression,
|
Expression<Func<TResult, bool>> whereExpression,
|
int intPageIndex = 1,
|
int intPageSize = 20,
|
string strOrderByFileds = null)
|
{
|
|
RefAsync<int> totalCount = 0;
|
var list = await _db.Queryable<T, T2, T3, T4>(joinExpression)
|
.Select(selectExpression)
|
.OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
|
.WhereIF(whereExpression != null, whereExpression)
|
.ToPageListAsync(intPageIndex, intPageSize, totalCount);
|
int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intPageSize.ObjToDecimal())).ObjToInt();
|
return new PageModel<TResult>() { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list };
|
}
|
|
/// <summary>
|
/// 五表联合查询-分页 add by wyb 2020/8/19
|
/// </summary>
|
/// <typeparam name="T">实体1</typeparam>
|
/// <typeparam name="T2">实体1</typeparam>
|
/// <typeparam name="T3">实体1</typeparam>
|
/// <typeparam name="T4">实体1</typeparam>
|
/// <typeparam name="T5">实体1</typeparam>
|
/// <typeparam name="TResult">返回对象</typeparam>
|
/// <param name="joinExpression">关联表达式</param>
|
/// <param name="selectExpression">返回表达式</param>
|
/// <param name="whereExpression">查询表达式</param>
|
/// <param name="intPageIndex">页码</param>
|
/// <param name="intPageSize">页大小</param>
|
/// <param name="strOrderByFileds">排序字段</param>
|
/// <returns></returns>
|
public async Task<PageModel<TResult>> QueryTabsPage<T1, T2, T3, T4, T5, TResult>(
|
Expression<Func<T1, T2, T3, T4, T5, object[]>> joinExpression,
|
Expression<Func<T1, T2, T3, T4, T5, TResult>> selectExpression,
|
Expression<Func<TResult, bool>> whereExpression,
|
int intPageIndex = 1,
|
int intPageSize = 20,
|
string strOrderByFileds = null)
|
{
|
|
RefAsync<int> totalCount = 0;
|
var list = await _db.Queryable<T1, T2, T3, T4, T5>(joinExpression)
|
.Select(selectExpression)
|
.OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
|
.WhereIF(whereExpression != null, whereExpression)
|
.ToPageListAsync(intPageIndex, intPageSize, totalCount);
|
int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intPageSize.ObjToDecimal())).ObjToInt();
|
return new PageModel<TResult>() { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list };
|
}
|
|
}
|
|
}
|