public static string ToODataFilterString <T>(this IEnumerable <FilterDescriptor> columns, RadzenDataGrid <T> dataGrid) {
private static string GetColumnODataFilter <T>(RadzenDataGrid <T> dataGrid, FilterDescriptor column, bool second = false) { string property = column.Property.Replace('.', '/'); var columnFilterOperator = !second ? column.FilterOperator : column.SecondFilterOperator; string value = !second ? (string)Convert.ChangeType(column.FilterValue, typeof(string)) : (string)Convert.ChangeType(column.SecondFilterValue, typeof(string)); var filterPropertyType = column.Property.GetType(); if (dataGrid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive && filterPropertyType == typeof(string)) { property = $"tolower({property})"; } if (filterPropertyType == typeof(string)) { if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.Contains) { return(dataGrid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ? $"contains({property}, tolower('{value}'))" : $"contains({property}, '{value}')"); } else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.DoesNotContain) { return(dataGrid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ? $"not(contains({property}, tolower('{value}')))" : $"not(contains({property}, '{value}'))"); } else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.StartsWith) { return(dataGrid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ? $"startswith({property}, tolower('{value}'))" : $"startswith({property}, '{value}')"); } else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.EndsWith) { return(dataGrid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ? $"endswith({property}, tolower('{value}'))" : $"endswith({property}, '{value}')"); } else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.Equals) { return(dataGrid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ? $"{property} eq tolower('{value}')" : $"{property} eq '{value}'"); } else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.NotEquals) { return(dataGrid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ? $"{property} ne tolower('{value}')" : $"{property} ne '{value}'"); } } else if (typeof(IEnumerable).IsAssignableFrom(column.Property.GetType()) && filterPropertyType != typeof(string)) { } else if (PropertyAccess.IsNumeric(filterPropertyType)) { return($"{property} {ODataFilterOperators[columnFilterOperator]} {value}"); } else if (filterPropertyType == typeof(bool) || filterPropertyType == typeof(bool?)) { return($"{property} eq {value.ToLower()}"); } else if (filterPropertyType == typeof(DateTime) || filterPropertyType == typeof(DateTime?) || filterPropertyType == typeof(DateTimeOffset) || filterPropertyType == typeof(DateTimeOffset?)) { return($"{property} {ODataFilterOperators[columnFilterOperator]} {DateTime.Parse(value, null, System.Globalization.DateTimeStyles.RoundtripKind):yyyy-MM-ddTHH:mm:ss.fffZ}"); } else if (filterPropertyType == typeof(Guid) || filterPropertyType == typeof(Guid?)) { return($"{property} {ODataFilterOperators[columnFilterOperator]} {value}"); } return(string.Empty); }
public Testable() { Grid = new RadzenDataGrid <TestModel>(); }