如何使用Get in C#满足WebApi查询字符串中的AND和OR搜索?
例如,对于诸如firstName=John OR firstName=Simon AND Country=UK OR Country=Canada OR LastName=Jones Or Age>=65
答案 0 :(得分:0)
如果您想“适当地”支持这种查询,则最好的措施是在WebAPI2 Controller上启用OData。
OData in ASP.NET Web API文档提供了在WebAPI项目中配置OData V4(以及V3)所需的所有信息,并提供了有关如何实施控制器操作(Supporting OData Query Options in ASP.NET Web API 2)的示例>
从上面的链接中,我们可以看到下一个代码片段:
public class ProductsController : ApiController
{
[Queryable]
IQueryable<Product> Get() {}
}
使用实体框架时,Get()实现的外观如何?
public class ProductsController : ApiController
{
[Queryable]
IQueryable<Product> Get() {
var ef = new myDbContext();
return ef.Products; // <-- DbSet<Product>
}
}
以及查询字符串如何查询此WebAPI EndPoint?
https://[domain]/api/v1/Products?$filter=firstName eq 'john' or firstName eq 'Simon' and country eq 'UK'
与上面的操作一样简单,因为.Net OData堆栈将立即对$ filter(以及OData规范支持的任何其他querystring元素)进行解析,并将查询(以及其他查询)应用于IQueryable物体本身
如果您不使用EF或任何其他提供对IQueryable的访问的系统,则可以拦截这种开箱即用的行为,并完全控制如何进行这种解析以使执行适应您的需求。 / p>