Cant read values from RuleModel when between operator is used

Hi, I've got issues with getting data from RuleModel class when "between" operator is used.

I use code below to get data from "value" field. Value is dynamic, so I was thinking that casting it to IEnumerable and then reading all values provided in between range will work - but it won't. Instead I get error of invalid casting - can't cast double to IEnumerable or can't cast data to IEnumerbale.

Code below works perfect for single input values.

How it is possible to read that range as 2 different values?


async Task FilterWasChosen()

    {

        filtersModels = new List<FilterModel>();

        if (queryBuilder.GetValidRules().Rules.Count > 0)

        {

            foreach (var rule in queryBuilder.GetRules().Rules)

            {

                filtersModels.Add(new FilterModel()

                    {

                        condition = "and",

                        field = rule.Field.ToString(),

                        filterOperator = rule.Operator.ToString(),

                        value = rule.Value

                    });

            }

        }


        await Filter();

    }


1 Reply

YA YuvanShankar Arunagiri Syncfusion Team May 9, 2022 07:12 AM UTC

Hi Szymon,


We have prepared a sample code based on your requirement. Please refer the below code snippet.


[Index.Razor]:


@using Syncfusion.Blazor

@using Syncfusion.Blazor.QueryBuilder

@using Syncfusion.Blazor.Buttons

 

<SfQueryBuilder TValue="EmployeeDetails" @ref="QueryBuilderObj">

    <QueryBuilderColumns>

        <QueryBuilderColumn Field="EmployeeID" Label="Employee ID" Type="ColumnType.Number"></QueryBuilderColumn>

        <QueryBuilderColumn Field="FirstName" Label="First Name" Type="ColumnType.String"></QueryBuilderColumn>

        <QueryBuilderColumn Field="TitleOfCourtesy" Label="Title of Courtesy" Type="ColumnType.Boolean" Values="Values"></QueryBuilderColumn>

        <QueryBuilderColumn Field="Title" Label="Title" Type="ColumnType.String"></QueryBuilderColumn>

        <QueryBuilderColumn Field="HireDate" Label="Hire Date" Type="ColumnType.Date"></QueryBuilderColumn>

        <QueryBuilderColumn Field="Country" Label="Country" Type="ColumnType.String"></QueryBuilderColumn>

        <QueryBuilderColumn Field="City" Label="City" Type="ColumnType.String"></QueryBuilderColumn>

    </QueryBuilderColumns>

</SfQueryBuilder>

 

<SfButton @onclick="onFilter">Filter</SfButton>

 

@code {

    SfQueryBuilder<EmployeeDetails> QueryBuilderObj;

    private bool[] Values = new bool[] { true, false };

    public class EmployeeDetails

    {

        public int EmployeeID { get; set; }

        public string FirstName { get; set; }

        public bool TitleOfCourtesy { get; set; }

        public string Title { get; set; }

        public DateTime HireDate { get; set; }

        public string Country { get; set; }

        public string City { get; set; }

    }

 

    public class FilterModel

    {

        public string condition { get; set; }

        public string field { get; set; }

        public string filterOperator { get; set; }

        public dynamic value { get; set; }

    }

 

    private void onFilter()

    {

        var d = QueryBuilderObj.GetGroup();

        var filtersModels = new List<FilterModel>();

        if (QueryBuilderObj.GetValidRules().Rules.Count > 0)

        {

            foreach (var rule in QueryBuilderObj.GetRules().Rules)

            {

                filtersModels.Add(new FilterModel()

                {

                    condition = "and",

                    field = rule.Field.ToString(),

                    filterOperator = rule.Operator.ToString(),

                    value = rule.Value

                });

            }

        }

    }

}


Could you please check with above code and get back to us, if you need any further assistance on this. 


Regards,

YuvanShankar A


Loader.
Up arrow icon