Esempio n. 1
0
        private IQueryable <Person> GetPersonQuery(ICallCenterStorage storage)
        {
            var defaultCall = new Call()
            {
                CallDate = DateTime.Now.AddDays((2 + MinDaysAfterLastCall) * (-1))
            };
            var persons = storage.Persons.Include(p => p.Calls).ToList();

            persons = persons.Where(p => (DateTime.Now - p.Calls.DefaultIfEmpty(defaultCall).Max(c => c.CallDate)).TotalDays >= MinDaysAfterLastCall).ToList();

            if (GenderFilter != Gender.All)
            {
                persons = persons.Where(p => p.Gender == GenderFilter).ToList();
            }
            if (AgeMin != null)
            {
                persons = persons.Where(p => p.BirthDate != null).Where(p => DateTime.Now.Year - (p.BirthDate?.Year ?? 0) >= AgeMin.Value).ToList();
            }
            if (AgeMax != null)
            {
                persons = persons.Where(p => p.BirthDate != null).Where(p => DateTime.Now.Year - (p.BirthDate?.Year) <= AgeMax.Value).ToList();
            }
            if (NameFilter != string.Empty)
            {
                persons = persons.FindAll(
                    p => p.FirstName.ToLower().Contains(NameFilter.ToLower()) ||
                    (p.LastName == null ? false : p.LastName.ToLower().Contains(NameFilter.ToLower())) ||
                    (p.Patronymic == null ? false : p.Patronymic.ToLower().Contains(NameFilter.ToLower()))).ToList();
            }
            var Ids = persons.Select(p => p.Id).ToList();

            //return persons.Skip((PageNo - 1) * PageSize).Take(PageSize).ToList();
            return(storage.Persons.AsNoTracking().Where(p => Ids.Contains(p.Id)).OrderBy(p => p.Id));
        }
Esempio n. 2
0
 public void Dispose()
 {
     if (_storage != null)
     {
         _storage.Dispose();
         _storage = null;
     }
 }
Esempio n. 3
0
 public async Task <int> GetCountAsync(ICallCenterStorage storage)
 {
     return(await GetPersonQuery(storage).CountAsync());
 }
Esempio n. 4
0
 public async Task <List <Person> > GetPersonsAsync(ICallCenterStorage storage)
 {
     return(await GetPersonQuery(storage).Skip((PageNo - 1) * PageSize).Take(PageSize).ToListAsync());
 }
Esempio n. 5
0
 public CallCenterService(ICallCenterStorage storage)
 {
     _storage = storage;
 }