Convert parsing from getters to methods

This commit is contained in:
Biarity 2018-07-06 11:12:45 +10:00
parent c816cf2f2a
commit f9c7fb4cb0
4 changed files with 57 additions and 63 deletions

View File

@ -20,8 +20,8 @@ namespace Sieve.Models
int? PageSize { get; set; } int? PageSize { get; set; }
List<TFilterTerm> FiltersParsed { get; } List<TFilterTerm> GetFiltersParsed();
List<TSortTerm> SortsParsed { get; } List<TSortTerm> GetSortsParsed();
} }
} }

View File

@ -25,76 +25,70 @@ namespace Sieve.Models
[DataMember, Range(1, int.MaxValue)] [DataMember, Range(1, int.MaxValue)]
public int? PageSize { get; set; } public int? PageSize { get; set; }
public List<TFilterTerm> FiltersParsed public List<TFilterTerm> GetFiltersParsed()
{ {
get if (Filters != null)
{ {
if (Filters != null) var value = new List<TFilterTerm>();
foreach (var filter in Filters.Split(','))
{ {
var value = new List<TFilterTerm>(); if (string.IsNullOrWhiteSpace(filter)) continue;
foreach (var filter in Filters.Split(','))
{
if (string.IsNullOrWhiteSpace(filter)) continue;
if (filter.StartsWith("(")) if (filter.StartsWith("("))
{
var filterOpAndVal = filter.Substring(filter.LastIndexOf(")") + 1);
var subfilters = filter.Replace(filterOpAndVal, "").Replace("(", "").Replace(")", "");
var filterTerm = new TFilterTerm
{ {
var filterOpAndVal = filter.Substring(filter.LastIndexOf(")") + 1); Filter = subfilters + filterOpAndVal
var subfilters = filter.Replace(filterOpAndVal, "").Replace("(", "").Replace(")", ""); };
var filterTerm = new TFilterTerm if (!value.Any(f => f.Names.Any(n => filterTerm.Names.Any(n2 => n2 == n))))
{
Filter = subfilters + filterOpAndVal
};
if (!value.Any(f => f.Names.Any(n => filterTerm.Names.Any(n2 => n2 == n))))
{
value.Add(filterTerm);
}
}
else
{ {
var filterTerm = new TFilterTerm
{
Filter = filter
};
value.Add(filterTerm); value.Add(filterTerm);
} }
} }
return value; else
} {
else var filterTerm = new TFilterTerm
{ {
return null; Filter = filter
};
value.Add(filterTerm);
}
} }
return value;
}
else
{
return null;
} }
} }
public List<TSortTerm> SortsParsed public List<TSortTerm> GetSortsParsed()
{ {
get if (Sorts != null)
{ {
if (Sorts != null) var value = new List<TSortTerm>();
foreach (var sort in Sorts.Split(','))
{ {
var value = new List<TSortTerm>(); if (string.IsNullOrWhiteSpace(sort)) continue;
foreach (var sort in Sorts.Split(','))
var sortTerm = new TSortTerm()
{ {
if (string.IsNullOrWhiteSpace(sort)) continue; Sort = sort
};
var sortTerm = new TSortTerm() if (!value.Any(s => s.Name == sortTerm.Name))
{ {
Sort = sort value.Add(sortTerm);
};
if (!value.Any(s => s.Name == sortTerm.Name))
{
value.Add(sortTerm);
}
} }
return value;
} }
else return value;
{
return null;
}
} }
else
{
return null;
}
} }
} }
} }

View File

@ -164,14 +164,14 @@ namespace Sieve.Services
IQueryable<TEntity> result, IQueryable<TEntity> result,
object[] dataForCustomMethods = null) object[] dataForCustomMethods = null)
{ {
if (model?.FiltersParsed == null) if (model?.GetFiltersParsed() == null)
{ {
return result; return result;
} }
Expression outerExpression = null; Expression outerExpression = null;
var parameterExpression = Expression.Parameter(typeof(TEntity), "e"); var parameterExpression = Expression.Parameter(typeof(TEntity), "e");
foreach (var filterTerm in model.FiltersParsed) foreach (var filterTerm in model.GetFiltersParsed())
{ {
Expression innerExpression = null; Expression innerExpression = null;
foreach (var filterTermName in filterTerm.Names) foreach (var filterTermName in filterTerm.Names)
@ -281,13 +281,13 @@ namespace Sieve.Services
IQueryable<TEntity> result, IQueryable<TEntity> result,
object[] dataForCustomMethods = null) object[] dataForCustomMethods = null)
{ {
if (model?.SortsParsed == null) if (model?.GetSortsParsed() == null)
{ {
return result; return result;
} }
var useThenBy = false; var useThenBy = false;
foreach (var sortTerm in model.SortsParsed) foreach (var sortTerm in model.GetSortsParsed())
{ {
var property = GetSieveProperty<TEntity>(true, false, sortTerm.Name); var property = GetSieveProperty<TEntity>(true, false, sortTerm.Name);

View File

@ -148,9 +148,9 @@ namespace SieveUnitTests
Filters = "LikeCount==50", Filters = "LikeCount==50",
}; };
Console.WriteLine(model.FiltersParsed[0].Value); Console.WriteLine(model.GetFiltersParsed()[0].Value);
Console.WriteLine(model.FiltersParsed[0].Operator); Console.WriteLine(model.GetFiltersParsed()[0].Operator);
Console.WriteLine(model.FiltersParsed[0].OperatorParsed); Console.WriteLine(model.GetFiltersParsed()[0].OperatorParsed);
var result = _processor.Apply(model, _posts); var result = _processor.Apply(model, _posts);