Blazor wasm grid with webapiadapter filter problem

I have page with a grid component that connects to my backendend db via an WebApiAdapter.

My controller receives the $inlinecount, $orderby parameters and I handle them according to the example found in documentation.

My controller also receives the $filter parameter but there is no example explaining how to handle the filtering of records.

Do I have to create a parser for the  $filter parameter to apply the filter.

This seems to be difficult jod, due to the plethora of cases   .

Is there a more easier way to apply the filter parameter?



1 Reply

MS Monisha Saravanan Syncfusion Team April 11, 2022 12:34 PM UTC

Hi Customer,


Greetings from Syncfusion support.


Query: “My controller also receives the $filter parameter but there is no example explaining how to handle the filtering of records”


We have analyzed your query and based on your shared query we have prepared an sample to perform filtering using WebApi Adaptor. Here by using the filter query string we have performed filtering. Kindly refer the attached code snippet and sample for your reference.


public async Task<object> Get()

        {

            if (order.Count == 0)

            {

                BindDataSource();

            }

            var data = order.AsQueryable();           

            var queryString = Request.Query;

            string filter = queryString["$filter"];

            if (filter != null) // to handle filter opertaion

            {

                if (filter.Contains("substring"))//searching

                {

                    var key = filter.Split(new string[] { "'" }, StringSplitOptions.None)[1];

                    data = data.Where(fil => fil.CustomerID.ToString().Contains(key.ToUpper())

                                            || fil.EmployeeID.ToString().Contains(key)

                                            || fil.Freight.ToString().Contains(key)

                                            || fil.OrderID.ToString().Contains(key));

                }

                else

                {

                    var newfiltersplits = filter;

                    var filtersplits = newfiltersplits.Split('(', ')', ' ');

                    var filterfield = "";

                    var filtervalue = "";

 

                    if (filtersplits.Length == 7)

                    {

                        filterfield = filtersplits[1];

                        filtervalue = filtersplits[3];

                        if (filtersplits[2] == "tolower")

                        {

                            filterfield = filter.Split('(', ')', '\'')[3];

                            filtervalue = filter.Split('(', ')', '\'')[5];

                        }

                    }

                    else if (filtersplits.Length == 13)

                    {

                        filterfield = filtersplits[9];

                        filtervalue = filtersplits[11];

                    }

                    else if (filtersplits.Length == 5)

                    {

                        filterfield = filtersplits[1];

                        filtervalue = filtersplits[3];

                    }

 

                    switch (filterfield)

                    {

                        case "OrderID":

                            data = (from cust in data

                                    where cust.OrderID.ToString() == filtervalue.ToString()

                                    select cust);

                            break;

                        case "CustomerID":

                            data = (from cust in data

                                    where cust.CustomerID.ToLower().StartsWith(filtervalue.ToString())

                                    select cust);

                            break;

                        case "Freight":

                            data = (from cust in data

                                    where cust.Freight.ToString() == filtervalue.ToString()

                                    select cust);

                            break;

                        case "OrderDate":

                            data = (from cust in data

                                    where cust.OrderDate.ToString() == filtervalue.ToString()

                                    select cust);

                            break;

                    }

                }

            }


Sample: https://www.syncfusion.com/downloads/support/directtrac/general/ze/WebAPISample528501654.zip


Reference: https://blazor.syncfusion.com/documentation/data/adaptors#web-api-adaptor


Note: Similarly handle for complex filters on your own

Kindly get back to us if you have further queries.


Regards,

Monisha


Loader.
Up arrow icon