private static string GetColumnODataFilter <T>(RadzenDataGridColumn <T> column, bool second = false)
        {
            var property = column.GetFilterProperty().Replace('.', '/');

            var columnFilterOperator = !second?column.GetFilterOperator() : column.GetSecondFilterOperator();

            var value = !second ? (string)Convert.ChangeType(column.GetFilterValue(), typeof(string)) :
                        (string)Convert.ChangeType(column.GetSecondFilterValue(), typeof(string));

            if (column.Grid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive && column.FilterPropertyType == typeof(string))
            {
                property = $"tolower({property})";
            }

            if (column.FilterPropertyType == typeof(string))
            {
                if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.Contains)
                {
                    return(column.Grid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ?
                           $"contains({property}, tolower('{value}'))" :
                           $"contains({property}, '{value}')");
                }
                else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.StartsWith)
                {
                    return(column.Grid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ?
                           $"startswith({property}, tolower('{value}'))" :
                           $"startswith({property}, '{value}')");
                }
                else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.EndsWith)
                {
                    return(column.Grid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ?
                           $"endswith({property}, tolower('{value}'))" :
                           $"endswith({property}, '{value}')");
                }
                else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.Equals)
                {
                    return(column.Grid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ?
                           $"{property} eq tolower('{value}')" :
                           $"{property} eq '{value}'");
                }
                else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.NotEquals)
                {
                    return(column.Grid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ?
                           $"{property} ne tolower('{value}')" :
                           $"{property} ne '{value}'");
                }
            }
            else if (PropertyAccess.IsNumeric(column.FilterPropertyType))
            {
                return($"{property} {ODataFilterOperators[columnFilterOperator]} {value}");
            }
            else if (column.FilterPropertyType == typeof(bool) || column.FilterPropertyType == typeof(bool?))
            {
                return($"{property} eq {value.ToLower()}");
            }
            else if (column.FilterPropertyType == typeof(DateTime) ||
                     column.FilterPropertyType == typeof(DateTime?) ||
                     column.FilterPropertyType == typeof(DateTimeOffset) ||
                     column.FilterPropertyType == typeof(DateTimeOffset?))
            {
                return($"{property} {ODataFilterOperators[columnFilterOperator]} {DateTime.Parse(value, null, System.Globalization.DateTimeStyles.RoundtripKind).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")}");
            }
            else if (column.FilterPropertyType == typeof(Guid) || column.FilterPropertyType == typeof(Guid?))
            {
                return($"{property} {ODataFilterOperators[columnFilterOperator]} {value}");
            }

            return("");
        }
        private static string GetColumnFilter <T>(RadzenDataGridColumn <T> column, bool second = false)
        {
            var property = PropertyAccess.GetProperty(column.GetFilterProperty());

            if (property.IndexOf(".") != -1)
            {
                property = $"({property})";
            }

            var columnFilterOperator = !second?column.GetFilterOperator() : column.GetSecondFilterOperator();

            var linqOperator = LinqFilterOperators[columnFilterOperator];

            if (linqOperator == null)
            {
                linqOperator = "==";
            }

            var value = !second ? (string)Convert.ChangeType(column.GetFilterValue(), typeof(string)) :
                        (string)Convert.ChangeType(column.GetSecondFilterValue(), typeof(string));

            if (column.FilterPropertyType == typeof(string))
            {
                string filterCaseSensitivityOperator = column.Grid.FilterCaseSensitivity == FilterCaseSensitivity.CaseInsensitive ? ".ToLower()" : "";

                if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.Contains)
                {
                    return($@"({property} == null ? """" : {property}){filterCaseSensitivityOperator}.Contains(""{value}""{filterCaseSensitivityOperator})");
                }
                else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.StartsWith)
                {
                    return($@"({property} == null ? """" : {property}){filterCaseSensitivityOperator}.StartsWith(""{value}""{filterCaseSensitivityOperator})");
                }
                else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.EndsWith)
                {
                    return($@"({property} == null ? """" : {property}){filterCaseSensitivityOperator}.EndsWith(""{value}""{filterCaseSensitivityOperator})");
                }
                else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.Equals)
                {
                    return($@"({property} == null ? """" : {property}){filterCaseSensitivityOperator} == ""{value}""{filterCaseSensitivityOperator}");
                }
                else if (!string.IsNullOrEmpty(value) && columnFilterOperator == FilterOperator.NotEquals)
                {
                    return($@"({property} == null ? """" : {property}){filterCaseSensitivityOperator} != ""{value}""{filterCaseSensitivityOperator}");
                }
            }
            else if (PropertyAccess.IsNumeric(column.FilterPropertyType))
            {
                return($"{property} {linqOperator} {value}");
            }
            else if (column.FilterPropertyType == typeof(DateTime) ||
                     column.FilterPropertyType == typeof(DateTime?) ||
                     column.FilterPropertyType == typeof(DateTimeOffset) ||
                     column.FilterPropertyType == typeof(DateTimeOffset?))
            {
                var dateTimeValue = DateTime.Parse(value, null, System.Globalization.DateTimeStyles.RoundtripKind);
                var finalDate     = dateTimeValue.TimeOfDay == TimeSpan.Zero ? dateTimeValue.Date : dateTimeValue;
                var dateFormat    = dateTimeValue.TimeOfDay == TimeSpan.Zero ? "yyyy-MM-dd" : "yyyy-MM-ddTHH:mm:ssZ";

                return($@"{property} {linqOperator} DateTime(""{finalDate.ToString(dateFormat)}"")");
            }
            else if (column.FilterPropertyType == typeof(bool) || column.FilterPropertyType == typeof(bool?))
            {
                return($"{property} == {value}");
            }
            else if (column.FilterPropertyType == typeof(Guid) || column.FilterPropertyType == typeof(Guid?))
            {
                return($@"{property} {linqOperator} Guid(""{value}"")");
            }

            return("");
        }