using Hncore.Infrastructure.EF; using Hncore.Pass.Manage.Configs; using Hncore.Pass.Manage.Domain; using Hncore.Pass.Manage.Repository; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; using System; using System.Linq; using System.Linq.Expressions; namespace Hncore.Pass.Manage.Service { /// /// 父业务逻辑类 /// /// public abstract class BaseService { /// /// 配置文件数据承载对象 /// protected readonly AppSettings _appSettings; /// /// EF上下文对象 /// protected readonly EfDbContext _dbCtx; /// /// 数据库连接字符串 /// public string OldDbConString { get { return _appSettings.OldDbConString; } } /// /// 构造函数 /// /// HTTP上下文访问对象 public BaseService(IHttpContextAccessor hca) { this._dbCtx= hca.HttpContext.RequestServices.GetService(typeof(EfDbContext)) as EfDbContext; //获取当前应用配置信息承载对象 var oa=hca.HttpContext.RequestServices.GetService(typeof(IOptionsMonitor)) as IOptionsMonitor; this._appSettings = oa.CurrentValue; } /// /// 获取操作员有权操作的项目编码列表(可直接用于EF查询中的Labmda查询条件中) /// /// 操作员数据库ID /// 隶属的物业ID /// 有权操作的项目编码列表,没有就返回null public IQueryable GetManagerProjectCodeList(int operaterId, int ownerId = 0) { if (operaterId <= 0) return null; Expression> expression = c => c.DeleteTag == 0 && c.ManagerId == operaterId; if (ownerId > 0) {//如果传递了物业ID,需要动态将物业ID追加到Lambda表达式中去 var p1 = expression.Parameters[0]; var ownerIdExpression = Expression.PropertyOrField(p1, "OwnerId"); var m3 = Expression.Equal(ownerIdExpression, Expression.Constant(ownerId)); var body= Expression.And(expression.Body, m3); expression = Expression.Lambda>(body, p1); } IQueryable list = _dbCtx.Set().GetQueryable().Where(expression).Select(c => c.ProjectCode); return list; } } }