cleaner like this. everyone respects the builder concept with a build method.
This commit is contained in:
parent
18a3756f51
commit
9ab186b811
@ -83,28 +83,23 @@ namespace PoweredSoft.DynamicLinq
|
|||||||
|
|
||||||
public static IQueryable GroupBy(this IQueryable query, Type type, Action<GroupBuilder> callback)
|
public static IQueryable GroupBy(this IQueryable query, Type type, Action<GroupBuilder> callback)
|
||||||
{
|
{
|
||||||
var groupBuilder = new GroupBuilder();
|
var groupBuilder = new GroupBuilder(query);
|
||||||
callback(groupBuilder);
|
callback(groupBuilder);
|
||||||
if (groupBuilder.Empty)
|
var ret = groupBuilder.Build();
|
||||||
throw new Exception("No group specified, please specify at least one group");
|
return ret;
|
||||||
|
|
||||||
return QueryableHelpers.GroupBy(query, type, groupBuilder.Parts, groupBuilder.Type, groupBuilder.EqualityComparerType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IQueryable Select(this IQueryable query, Action<SelectBuilder> callback)
|
public static IQueryable Select(this IQueryable query, Action<SelectBuilder> callback)
|
||||||
{
|
{
|
||||||
var sb = new SelectBuilder();
|
var sb = new SelectBuilder(query);
|
||||||
callback(sb);
|
callback(sb);
|
||||||
if (sb.Empty)
|
var ret = sb.Build();
|
||||||
throw new Exception("No select specified, please specify at least one select path");
|
return ret;
|
||||||
|
|
||||||
return QueryableHelpers.Select(query,
|
|
||||||
sb.Parts.Select(t => (selectType: t.SelectType, propertyName: t.PropertyName, path: t.Path)).ToList(),
|
|
||||||
sb.DestinationType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<object> ToObjectList(this IQueryable query)
|
public static List<object> ToObjectList(this IQueryable query)
|
||||||
{
|
{
|
||||||
|
// Expression call tolist?
|
||||||
var ret = new List<object>();
|
var ret = new List<object>();
|
||||||
foreach (var o in query)
|
foreach (var o in query)
|
||||||
ret.Add(o);
|
ret.Add(o);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using PoweredSoft.DynamicLinq.Helpers;
|
||||||
|
|
||||||
namespace PoweredSoft.DynamicLinq.Fluent
|
namespace PoweredSoft.DynamicLinq.Fluent
|
||||||
{
|
{
|
||||||
@ -12,6 +13,13 @@ namespace PoweredSoft.DynamicLinq.Fluent
|
|||||||
public bool Empty => !Parts.Any();
|
public bool Empty => !Parts.Any();
|
||||||
public Type EqualityComparerType { get; set; }
|
public Type EqualityComparerType { get; set; }
|
||||||
|
|
||||||
|
public IQueryable Query { get; protected set; }
|
||||||
|
|
||||||
|
public GroupBuilder(IQueryable query)
|
||||||
|
{
|
||||||
|
Query = query;
|
||||||
|
}
|
||||||
|
|
||||||
public GroupBuilder Path(string path, string propertyName = null)
|
public GroupBuilder Path(string path, string propertyName = null)
|
||||||
{
|
{
|
||||||
if (propertyName == null)
|
if (propertyName == null)
|
||||||
@ -44,5 +52,14 @@ namespace PoweredSoft.DynamicLinq.Fluent
|
|||||||
EqualityComparerType = type;
|
EqualityComparerType = type;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual IQueryable Build()
|
||||||
|
{
|
||||||
|
if (Empty)
|
||||||
|
throw new Exception("No group specified, please specify at least one group");
|
||||||
|
|
||||||
|
var ret = QueryableHelpers.GroupBy(Query, Query.ElementType, Parts, Type, EqualityComparerType);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using PoweredSoft.DynamicLinq.Helpers;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -17,6 +18,12 @@ namespace PoweredSoft.DynamicLinq.Fluent
|
|||||||
public List<SelectPart> Parts = new List<SelectPart>();
|
public List<SelectPart> Parts = new List<SelectPart>();
|
||||||
public Type DestinationType { get; set; }
|
public Type DestinationType { get; set; }
|
||||||
public bool Empty => Parts?.Count == 0;
|
public bool Empty => Parts?.Count == 0;
|
||||||
|
public IQueryable Query { get; protected set; }
|
||||||
|
|
||||||
|
public SelectBuilder(IQueryable query)
|
||||||
|
{
|
||||||
|
Query = query;
|
||||||
|
}
|
||||||
|
|
||||||
protected void throwIfUsedOrEmpty(string propertyName)
|
protected void throwIfUsedOrEmpty(string propertyName)
|
||||||
{
|
{
|
||||||
@ -108,5 +115,14 @@ namespace PoweredSoft.DynamicLinq.Fluent
|
|||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual IQueryable Build()
|
||||||
|
{
|
||||||
|
if (Empty)
|
||||||
|
throw new Exception("No select specified, please specify at least one select path");
|
||||||
|
|
||||||
|
var partsTuple = Parts.Select(t => (selectType: t.SelectType, propertyName: t.PropertyName, path: t.Path)).ToList();
|
||||||
|
return QueryableHelpers.Select(Query, partsTuple, DestinationType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user