-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDbSetExtensions.cs
More file actions
72 lines (63 loc) · 3.68 KB
/
DbSetExtensions.cs
File metadata and controls
72 lines (63 loc) · 3.68 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
using Microsoft.EntityFrameworkCore;
namespace SIL.Harmony.Db;
//todo, I would like to move these extensions into QueryHelperTests but that's in Core and ObjectSnapshot is not part of core
public static class DbSetExtensions
{
public static IQueryable<ObjectSnapshot> DefaultOrder(this IQueryable<ObjectSnapshot> queryable)
{
return queryable
.OrderBy(c => c.Commit.HybridDateTime.DateTime)
.ThenBy(c => c.Commit.HybridDateTime.Counter)
.ThenBy(c => c.Commit.Id);
}
public static IQueryable<ObjectSnapshot> DefaultOrderDescending(this IQueryable<ObjectSnapshot> queryable)
{
return queryable
.OrderByDescending(c => c.Commit.HybridDateTime.DateTime)
.ThenByDescending(c => c.Commit.HybridDateTime.Counter)
.ThenByDescending(c => c.Commit.Id);
}
public static IEnumerable<ObjectSnapshot> DefaultOrder(this IEnumerable<ObjectSnapshot> queryable)
{
return queryable
.OrderBy(c => c.Commit.HybridDateTime.DateTime)
.ThenBy(c => c.Commit.HybridDateTime.Counter)
.ThenBy(c => c.Commit.Id);
}
public static IEnumerable<ObjectSnapshot> DefaultOrderDescending(this IEnumerable<ObjectSnapshot> queryable)
{
return queryable
.OrderByDescending(c => c.Commit.HybridDateTime.DateTime)
.ThenByDescending(c => c.Commit.HybridDateTime.Counter)
.ThenByDescending(c => c.Commit.Id);
}
public static IQueryable<ObjectSnapshot> WhereAfter(this IQueryable<ObjectSnapshot> queryable, Commit after)
{
return queryable.Where(
s => after.HybridDateTime.DateTime < s.Commit.HybridDateTime.DateTime
|| (after.HybridDateTime.DateTime == s.Commit.HybridDateTime.DateTime && after.HybridDateTime.Counter < s.Commit.HybridDateTime.Counter)
|| (after.HybridDateTime.DateTime == s.Commit.HybridDateTime.DateTime && after.HybridDateTime.Counter == s.Commit.HybridDateTime.Counter && after.Id < s.Commit.Id));
}
public static IQueryable<ObjectSnapshot> WhereBefore(this IQueryable<ObjectSnapshot> queryable, Commit before, bool inclusive = false)
{
if (inclusive)
{
return queryable.Where(c => c.Commit.HybridDateTime.DateTime < before.HybridDateTime.DateTime
|| (c.Commit.HybridDateTime.DateTime == before.HybridDateTime.DateTime &&
c.Commit.HybridDateTime.Counter < before.HybridDateTime.Counter)
|| (c.Commit.HybridDateTime.DateTime == before.HybridDateTime.DateTime &&
c.Commit.HybridDateTime.Counter == before.HybridDateTime.Counter &&
c.CommitId < before.Id)
|| c.CommitId == before.Id);
}
return queryable.Where(c => c.Commit.HybridDateTime.DateTime < before.HybridDateTime.DateTime
|| (c.Commit.HybridDateTime.DateTime == before.HybridDateTime.DateTime &&
c.Commit.HybridDateTime.Counter < before.HybridDateTime.Counter)
|| (c.Commit.HybridDateTime.DateTime == before.HybridDateTime.DateTime &&
c.Commit.HybridDateTime.Counter == before.HybridDateTime.Counter && c.CommitId < before.Id));
}
public static IQueryable<T> AsTracking<T>(this IQueryable<T> queryable, bool tracking = true) where T : class
{
return queryable.AsTracking(tracking ? QueryTrackingBehavior.TrackAll : QueryTrackingBehavior.NoTracking);
}
}