/// <summary> /// Transforms a DataTables sort object into a DapperExtensions sort element. /// </summary> /// <param name="sort"></param> /// <returns></returns> public static ISort GetSortPredicate <TElement>(this Core.IColumn column) { if (column == null) { return(null); } if (column.Sort == null) { return(null); } // Scaffolds type and searches for member (field) name. var typeSearchResult = TypeSearchResult.Scaffold <TElement>(column.Field); // Type does not contains member - returns a null sort to ensure compliance. if (!typeSearchResult.ContainsMember) { return(null); } return(new Sort() { Ascending = column.Sort.Direction == Core.SortDirection.Ascending, PropertyName = column.Field }); }
/// <summary> /// Gets the DapperExtensions filter predicate for a given column, if any search is set. /// Important: regex search is not supported. /// </summary> /// <typeparam name="TElement">The type of corresponding entity.</typeparam> /// <param name="column">The column to get search information.</param> /// <param name="forceEqualsOperator">Forces '==' operator for string properties.</param> /// <returns>The field predicate for the specified type or null.</returns> public static IPredicate GetFilterPredicate <TElement>(this Core.IColumn column, bool forceEqualsOperator) where TElement : class { if (column == null) { return(null); } if (!column.IsSearchable) { return(null); } if (column.Search == null) { return(null); } if (column.Search.IsRegex) { return(null); } // Scaffolds type and searches for member (field) name. var typeSearchResult = TypeSearchResult.Scaffold <TElement>(column.Field); // Type does not contains member - returns a null predicate to ensure compliance. if (!typeSearchResult.ContainsMember) { return(null); } // By default, 'LIKE' should be used when searching string content on database. // You can, however, force usage of '==' operator if desired. var _operator = forceEqualsOperator ? Operator.Eq : typeSearchResult.IsStringProperty ? Operator.Like : Operator.Eq; return(new FieldPredicate <TElement>() { PropertyName = column.Field, Operator = _operator, Value = column.Search.Value }); }
// https://github.com/ALMMa/datatables.aspnet/issues/58 public static IEnumerable <T> OrderBy <T>(this IEnumerable <T> entities, Core.IColumn column) { if (!entities.Any() || column == null) { return(entities); } var propertyInfo = entities.First().GetType().GetProperty(column.Field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); if (propertyInfo == null) { return(entities); } if (column.Sort.Direction == SortDirection.Ascending) { return(entities.OrderBy(e => propertyInfo.GetValue(e, null))); } return(entities.OrderByDescending(e => propertyInfo.GetValue(e, null))); }
/// <summary> /// Gets the DapperExtensions filter predicate for a given column, if any search is set. /// Important: regex search is not supported. /// </summary> /// <typeparam name="TElement">The type of corresponding entity.</typeparam> /// <param name="column">The column to get search information.</param> /// <returns>The field predicate for the specified type or null.</returns> public static IPredicate GetFilterPredicate <TElement>(this Core.IColumn column) where TElement : class { return(column.GetFilterPredicate <TElement>(false)); }