using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using EnVisage.Models; namespace EnVisage.Code.BLL { public class CreditDepartmentManager : ManagerBase { public CreditDepartmentManager(EnVisageEntities dbContext) : base(dbContext) { } protected override CreditDepartment InitInstance() { return new CreditDepartment { Id = Guid.NewGuid() }; } protected override CreditDepartment RetrieveReadOnlyById(Guid key) { return DataTable.AsNoTracking().FirstOrDefault(t => t.Id == key); } public override DbSet DataTable { get { return DbContext.CreditDepartments; } } public CreditDepartmentModel LoadCreditDepartmentModel(Guid departmentId) { if (departmentId == Guid.Empty) return null; return CreditDepartmentModelBasicQuery.FirstOrDefault(x => x.Id == departmentId); } public List LoadCreditDepartments() { return CreditDepartmentModelBasicQuery.ToList(); } public List GetCreditDepartmentsByExpCats(IEnumerable expCats) { if (expCats == null) return LoadCreditDepartments(); var result = DbContext.CreditDepartments.Include(x => x.ExpenditureCategory) .Where(x => x.ExpenditureCategory.Where(e => expCats.Contains(e.Id)).Any()) .Select(x => new CreditDepartmentModel() { Id = x.Id, Name = x.Name, CreditNumber = x.CreditNumber }).ToList(); return result; } #region Private Members private IQueryable CreditDepartmentModelBasicQuery { get { var query = DataTable.Include(x => x.ExpenditureCategory).AsNoTracking() .Select(x => new CreditDepartmentModel() { Id = x.Id, Name = x.Name, CreditNumber = x.CreditNumber, ExpenditureCategoryCount = x.ExpenditureCategory.Count }); return query; } } #endregion } }