-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathSubjectManager.cs
More file actions
101 lines (89 loc) · 3.2 KB
/
SubjectManager.cs
File metadata and controls
101 lines (89 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using BExIS.Security.Entities.Subjects;
using BExIS.Utils.NH.Querying;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using Vaiona.Persistence.Api;
namespace BExIS.Security.Services.Subjects
{
public class SubjectManager : IDisposable
{
private readonly IUnitOfWork _guow = null;
private bool isDisposed = false;
public SubjectManager()
{
_guow = this.GetIsolatedUnitOfWork();
SubjectRepository = _guow.GetReadOnlyRepository<Subject>();
}
~SubjectManager()
{
Dispose(true);
}
public IReadOnlyRepository<Subject> SubjectRepository { get; }
public IQueryable<Subject> Subjects => SubjectRepository.Query();
/// <summary>
/// returns subset of subjects based on the parameters
/// and also count of filtered list
/// </summary>
/// <param name="filter"></param>
/// <param name="orderBy"></param>
/// <param name="pageNumber"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <returns></returns>
public List<Subject> GetSubjects(FilterExpression filter, OrderByExpression orderBy, int pageNumber, int pageSize, out int count)
{
var orderbyClause = orderBy?.ToLINQ();
var whereClause = filter?.ToLINQ();
count = 0;
try
{
using (IUnitOfWork uow = this.GetUnitOfWork())
{
if (whereClause != null && orderBy != null)
{
var l = Subjects.Where(whereClause);
var x = l.OrderBy(orderbyClause);
var y = x.Skip((pageNumber - 1) * pageSize);
var z = y.Take(pageSize);
count = l.Count();
return z.ToList();
}
else if (whereClause != null)
{
var filtered = Subjects.Where(whereClause);
count = filtered.Count();
return filtered.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
}
if (orderBy != null)
{
count = Subjects.Count();
return Subjects.OrderBy(orderbyClause).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
}
return Subjects.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
}
}
catch (Exception ex)
{
throw new Exception(string.Format("Could not retrieve filtered subjects."), ex);
}
}
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
if (disposing)
{
if (_guow != null)
_guow.Dispose();
isDisposed = true;
}
}
}
}
}