Если вы хотите «правильно» поддерживать такие запросы, лучше всего включить OData на контроллере WebAPI2.
Документация OData в ASP.NET Web API содержит всю информацию, необходимую для настройки OData V4 (также V3) в вашем проекте WebAPI, а также примеры того, как реализовать ваши действия контроллеров ( Поддержка параметров запроса OData в ASP.NET Web API 2 с)
Из приведенной выше ссылки мы видим следующий фрагмент кода:
public class ProductsController : ApiController
{
[Queryable]
IQueryable<Product> Get() {}
}
Как выглядит реализация Get () при использовании Entity Framework?
public class ProductsController : ApiController
{
[Queryable]
IQueryable<Product> Get() {
var ef = new myDbContext();
return ef.Products; // <-- DbSet<Product>
}
}
А как будет выглядеть строка запроса для запроса этой конечной точки WebAPI?
https://[domain]/api/v1/Products?$filter=firstName eq 'john' or firstName eq 'Simon' and country eq 'UK'
Это так же просто, как указано выше, потому что стек ODNet .Net будет анализировать из коробки $ filter (и любой другой элемент строки запроса, поддерживаемый спецификацией OData) и применять запрос (и другие) к IQueryable. объект сам по себе
Если вы не используете EF или какую-либо другую систему, предоставляющую доступ к IQueryable, вы можете перехватить это готовое поведение и получить полный контроль над тем, как происходит такой анализ, чтобы адаптировать выполнение к вашим потребностям.