Filtering in Asp.Net Core

Share this post on:

Hello and Happy New Year! The last article is about one library I develop that helps you build REST APIs with CRUD, filtering and many more features that enhance the development of applications in ASP.NET Core.

In this article I’ll be talking a bit about the filtering functionality that is implemented in the library. This is really helpful in many situations and it’s very efficiently implemented so that SQL statements are ran directly in the database and not in the memory.

How to use them

Good, let’s give it a bit of context. Let’s suppose that we have an endpoint which returns paged data. I use this article as a starting point. We’ll send GET requests to the endpoint and every query statement will be added as a parameter in the query string. Each statement has the form:

operation=memberName:value

As you already know, each query parameter should be separated by ampersand (&). Multiple statements are considered separated by an AND logical operator. If there are two identical operations that refer to the same member, between them OR is applied.

Filter operations

Here is a list of filters that can be applied. You can see them like a kind of OData but simpler in my opinion.

  1. eq – equal operator which works with int, float, Guid, string and doubles. As of this writing, it seems that bool is not working 🙄
  2. neq – not equal operator which works as above
  3. gt – greater than operator which works with comparable types
  4. gte – greater than or equal operator
  5. lt – less than operator which works with comparable types
  6. lte – less than or equal
  7. contains – only for strings, checks if the value is contained in the string
  8. starts – only for strings, checks if the member value starts with value
  9. ends – only for strings, checks if the member value ends with value

Note that the contains, starts and ends operations are case sensitive. A plan to add case insensitive operations for these exists.

Putting into practice

Let’s use a couple of operations so you can see in practice how they work. Let’s suppose a normal GET request looks like this:

The paginated response returns all the entities available (in our case 3). Let’s try to filter only the products that have the price equal to 2.899:

As you can see, the call returned 2 results now. Ok let’s try the not equal operation:

Pretty cool, no? Let’s see greater than + less than equal operations:

In this case, we got only one product respecting the conditions. Let’s also see a starts operation:

Conclusion

I hope this article showed in an easy way how to use the filter operations in your controller. You get this and many others out of the box without writing code if you follow the first article dedicated to the Mindgaze.AspNetCore library. As a proof, you can see I didn’t use any code in this article and you’ll see that very little to no code is required to benefit from the features it provides.

This Mindgaze.AspNetCore library has more features like:

  • Pagination
  • Sorting
  • Include
  • Testing with fixtures
  • DTO supplier

I will write articles about all of these because I think they are really useful in the context of a production application. So if you have questions let me know, I hope you enjoyed this!

Thanks for reading, I hope you found this article useful and interesting. If you have any suggestions don’t hesitate to contact me. If you found my content useful please consider a small donation. Any support is greatly appreciated! Cheers  😉

Hi there 👋
It’s nice to meet you.

Sign up to receive useful content in your inbox, every month.

Spam is a waste of time, I prefer something creative! Read the privacy policy for more info.

Share this post on:

Author: afivan

Enthusiast adventurer, software developer with a high sense of creativity, discipline and achievement. I like to travel, I like music and outdoor sports. Because I have a broken ligament, I prefer safer activities like running or biking. In a couple of years, my ambition is to become a good technical lead with entrepreneurial mindset. From a personal point of view, I’d like to establish my own family, so I’ll have lots of things to do, there’s never time to get bored 😂

View all posts by afivan >