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?
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