MeiRiYiCheng_1_old/Nirvana.Data/Respository/Repository.cs

234 lines
7.7 KiB
C#
Raw Permalink Normal View History

2025-07-16 17:14:38 +08:00
using Nirvana.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace Nirvana.Data
{
/// <summary>
/// 仓储实现类
/// </summary>
public abstract class Repository<T> : IRepository<T> where T : class, new()
{
public object Add(T entity)
{
using (var dbClient = ReadDbContext.GetInstance())
{
var addresult = dbClient.Insertable(entity).ExecuteCommand();
return addresult > 0;
}
}
public bool AddList(List<T> TModels)
{
using (var dbClient = ReadDbContext.GetInstance())
{
return dbClient.Insertable(TModels.ToArray()).ExecuteCommand() > 0;
}
}
public bool Delete(Expression<Func<T, bool>> predicate)
{
using (var dbClient = ReadDbContext.GetInstance())
{
var deleteresult = dbClient.Deleteable<T>(predicate).ExecuteCommand();
return deleteresult > 0;
}
}
public List<T> GetList(Expression<Func<T, bool>> predicate)
{
using (var dbClient = ReadDbContext.GetInstance())
{
return dbClient.Queryable<T>().Where(predicate).ToList();
}
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="predicate"></param>
/// <returns></returns>
public async Task<List<T>> GetListAsync(Expression<Func<T, bool>> predicate)
{
using (var dbClient = ReadDbContext.GetInstance())
{
return await dbClient.Queryable<T>().Where(predicate).ToListAsync();
}
}
public T GetModel(Expression<Func<T, bool>> predicate)
{
using (var dbClient = ReadDbContext.GetInstance())
{
return dbClient.Queryable<T>().Where(predicate).First();
}
}
public PageData<T> GetPageList(int pageIndex, int pageSize, string strwhere, string strorder)
{
List<T> query;
var rows = 0;
using (var dbClient = ReadDbContext.GetInstance())
{
query = dbClient.Queryable<T>().Where(strwhere).OrderBy(strorder).ToPageList(pageIndex, pageSize, ref rows);
}
return new PageData<T>
{
CurrentPage = pageIndex,
Items = query,
TotalNum = rows,
TotalPageCount = Convert.ToInt32(Math.Ceiling(rows * 1.0 / pageSize))
};
}
/// <summary>
/// 分页查询
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
public async Task<ParamReturnData<T>> GetPageListAsync(ParamQuery param)
{
RefAsync<int> totalnum = 0;
using (var dbClient = ReadDbContext.GetInstance())
{
var temquery = dbClient.Queryable<T>();
string sorts = string.Format("{0} {1}", param.sort, param.order);
var query = await temquery.OrderBy(sorts)
.ToPageListAsync(param.page, param.pagesize, totalnum);
return new ParamReturnData<T>
{
page = param.page,
items = query,
totalnum = totalnum,
pagesize = param.pagesize
};
}
}
/// <summary>
/// 获取分页结果
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
public async Task<PageParms<T>> GetPageListAsync(QueryParams param)
{
RefAsync<int> totalnum = 0;
using (var dbClient = ReadDbContext.GetInstance())
{
var temquery = dbClient.Queryable<T>();
if (param.queryParam != null && param.queryParam.Count > 0)
{
List<IConditionalModel> conModels = new List<IConditionalModel>();
param.queryParam.ForEach(x =>
{
if (!string.IsNullOrEmpty(x.Value))
{
conModels.Add(new ConditionalModel()
{
FieldName = x.Name,
ConditionalType = (ConditionalType)x.Type,
FieldValue = x.Value.Trim()
});
}
});
if (conModels.Count > 0)
{
temquery = temquery.Where(conModels);
}
}
string sorts = string.Format("{0} {1}", param.sort, param.order);
var query = await temquery.OrderBy(sorts)
.ToPageListAsync(param.offset, param.limit, totalnum);
return new PageParms<T>
{
page = param.offset,
Items = query,
totalnum = totalnum,
limit = param.limit
};
}
}
public PageData<T> GetPageList(int pageIndex, int pageSize, Expression<Func<T, bool>> whereLambda, params MutilOrderExpress<T>[] orderBy)
{
List<T> query;
var rows = 0;
using (var dbClient = ReadDbContext.GetInstance())
{
var tempquery = dbClient.Queryable<T>()
.Where(whereLambda);
orderBy.ToList().ForEach((item) =>
{
tempquery = item.OrderBy.HasValue
? tempquery.OrderBy(item.Expression, item.OrderBy.Value)
: tempquery.OrderBy(item.Expression);
});
query = tempquery
.ToPageList(pageIndex, pageSize, ref rows);
}
return new PageData<T>
{
CurrentPage = pageIndex,
Items = query,
TotalNum = rows,
TotalPageCount = pageSize == 0 ? 0 : Convert.ToInt32(Math.Ceiling(rows * 1.0 / pageSize))
};
}
public bool IsExist(Expression<Func<T, bool>> predicate)
{
using (var dbClient = ReadDbContext.GetInstance())
{
return dbClient.Queryable<T>().Any(predicate);
}
}
public bool Update(T entity)
{
using (var dbClient = ReadDbContext.GetInstance())
{
var updateresult = dbClient
.Updateable(entity)
.ExecuteCommand();
return updateresult > 1;
}
}
public bool UpdateList(List<T> TModels)
{
using (var dbClient = ReadDbContext.GetInstance())
{
return dbClient.Updateable(TModels).ExecuteCommand() > 0;
}
}
/// <summary>
/// 生成随机的唯一ID
/// </summary>
/// <returns></returns>
public long GenWorkId(long workerId = 1)
{
return new IdWorker(workerId).nextid();
}
/// <summary>
/// 生成随机的唯一ID
/// </summary>
/// <param name="workerId"></param>
/// <returns></returns>
public static long genunionid(long workerId = 1)
{
return new IdWorker(workerId).nextid();
}
List<T> IRepository<T>.GetListAsync(Expression<Func<T, bool>> predicate)
{
throw new NotImplementedException();
}
}
}