next would be to add a bit more interceptors, example to interface the result of an aggregate and change it :)
This commit is contained in:
@@ -69,9 +69,15 @@ namespace PoweredSoft.DynamicQuery
|
||||
cgrr.GroupValue = groupRecord.GetDynamicPropertyValue($"Key_{gi}");
|
||||
|
||||
if (!isLast)
|
||||
{
|
||||
cgrr.Data = new List<object>();
|
||||
}
|
||||
else
|
||||
cgrr.Data = groupRecord.GetDynamicPropertyValue<List<T>>("Records").Cast<object>().ToList();
|
||||
{
|
||||
var entities = groupRecord.GetDynamicPropertyValue<List<T>>("Records");
|
||||
var records = InterceptConvertTo<T>(entities);
|
||||
cgrr.Data = records;
|
||||
}
|
||||
|
||||
if (previousGroupResults.Any())
|
||||
previousGroupResults.Last().Data.Add(cgrr);
|
||||
@@ -204,9 +210,13 @@ namespace PoweredSoft.DynamicQuery
|
||||
// sorts and paging.
|
||||
ApplySorting<T>();
|
||||
ApplyPaging<T>();
|
||||
|
||||
// the data.
|
||||
result.Data = CurrentQueryable.ToObjectList();
|
||||
|
||||
// data.
|
||||
var entities = ((IQueryable<T>)CurrentQueryable).ToList();
|
||||
var records = InterceptConvertTo<T>(entities);
|
||||
result.Data = records;
|
||||
|
||||
// aggregates.
|
||||
result.Aggregates = CalculateTotalAggregate<T>(afterFilterQueryable);
|
||||
|
||||
return result;
|
||||
|
||||
@@ -96,6 +96,36 @@ namespace PoweredSoft.DynamicQuery
|
||||
return ret;
|
||||
}
|
||||
|
||||
protected virtual List<object> InterceptConvertTo<T>(List<T> entities)
|
||||
{
|
||||
var objects = entities.Cast<object>().ToList();
|
||||
for (var i = 0; i < objects.Count; i++)
|
||||
objects[i] = InterceptConvertToObject<T>(objects[i]);
|
||||
|
||||
return objects;
|
||||
}
|
||||
|
||||
protected virtual object InterceptConvertToObject<T>(object o)
|
||||
{
|
||||
o = Interceptors
|
||||
.Where(t => t is IQueryConvertInterceptor)
|
||||
.Cast<IQueryConvertInterceptor>()
|
||||
.Aggregate(o, (prev, interceptor) => interceptor.InterceptResultTo(prev));
|
||||
|
||||
o = Interceptors
|
||||
.Where(t => t is IQueryConvertInterceptor<T>)
|
||||
.Cast<IQueryConvertInterceptor<T>>()
|
||||
.Aggregate(o, (prev, interceptor) =>
|
||||
{
|
||||
if (prev is T)
|
||||
return interceptor.InterceptResultTo((T)prev);
|
||||
|
||||
return o;
|
||||
});
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
protected virtual List<ISort> InterceptSort<T>(ISort sort)
|
||||
{
|
||||
var original = new List<ISort>()
|
||||
|
||||
Reference in New Issue
Block a user