using PoweredSoft.DynamicLinq.Fluent; using PoweredSoft.DynamicLinq.Helpers; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace PoweredSoft.DynamicLinq { public static class QueryableExtensions { public static IQueryable Where(this IQueryable query, string path, ConditionOperators conditionOperator, object value, QueryConvertStrategy convertStrategy = QueryConvertStrategy.ConvertConstantToComparedPropertyOrField, QueryCollectionHandling collectionHandling = QueryCollectionHandling.Any, StringComparison? stringComparision = null) { query = query.Query(qb => qb.Compare(path, conditionOperator, value, convertStrategy: convertStrategy, collectionHandling: collectionHandling, stringComparision: stringComparision)); return query; } public static IQueryable Where(this IQueryable query, Action> callback) => query.Query(callback); public static IQueryable Query (this IQueryable query, Action> callback) { var queryBuilder = new QueryBuilder(query); callback(queryBuilder); var ret = queryBuilder.Build(); return ret; } public static IQueryable Sort(this IQueryable query, string path, QuerySortDirection sortDirection, bool appendSort) { var qb = new QueryBuilder(query); qb.Sort(path, sortDirection, appendSort); var ret = qb.Build(); return ret; } public static IQueryable OrderBy(this IQueryable query, string path) { var qb = new QueryBuilder(query); qb.OrderBy(path); var ret = qb.Build(); return ret; } public static IQueryable OrderByDescending(this IQueryable query, string path) { var qb = new QueryBuilder(query); qb.OrderByDescending(path); var ret = qb.Build(); return ret; } public static IQueryable ThenBy(this IQueryable query, string path) { var qb = new QueryBuilder(query); qb.ThenBy(path); var ret = qb.Build(); return ret; } public static IQueryable ThenByDescending(this IQueryable query, string path) { var qb = new QueryBuilder(query); qb.ThenByDescending(path); var ret = qb.Build(); return ret; } public static IQueryable GroupBy(this IQueryable query, string path) => QueryableHelpers.GroupBy(query, typeof(T), path); public static IQueryable GroupBy(this IQueryable query, Type type, string path) => QueryableHelpers.GroupBy(query, type, path); public static IQueryable GroupBy(this IQueryable query, Action callback) => query.GroupBy(typeof(T), callback); public static IQueryable GroupBy(this IQueryable query, Type type, Action callback) { var groupBuilder = new GroupBuilder(); callback(groupBuilder); if (groupBuilder.Empty) throw new Exception("No group specified, please specify at least one group"); return QueryableHelpers.GroupBy(query, type, groupBuilder.Parts, groupBuilder.Type, groupBuilder.EqualityComparerType); } } }