如何在 C# 中使用 Get 在 WebApi 查询字符串中进行 AND 和 OR 搜索?
例如,搜索 firstName=John OR firstName=Simon AND Country=UK OR Country=Canada OR LastName=Jones Or Age>=65
最佳答案
如果您想“正确地”支持这种查询,最好的做法是在您的 WebAPI2 Controller 上启用 OData。
OData in ASP.NET Web API文档提供了在 WebAPI 项目中配置 OData V4(以及 V3)所需的所有信息,并提供了有关如何实现 Controller 操作的示例(Supporting OData Query Options in ASP.NET Web API 2 s)
从上面的链接我们可以看到下一个代码片段:
public class ProductsController : ApiController
{
[Queryable]
IQueryable<Product> Get() {}
}
当您使用 Entity Framework 时,Get() 实现看起来如何?
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'
与上面一样简单,因为 .Net OData 堆栈将开箱即用地解析 $filter(以及 OData 规范支持的任何其他查询字符串元素)并将查询(和其他)应用于 IQueryable对象本身
如果您不使用 EF 或提供对 IQueryable 的访问的任何其他系统,您可以拦截这种开箱即用的行为并完全控制这种解析发生的方式以使执行适应您的需要。
关于c# - 您如何满足 WebApi 查询字符串中的 AND 和 OR 搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55360656/