OData:对url请求中的数字(ID)字段进行通配符(startswith)筛选

OData:Wildcard (startswith) filtering for number (ID) fields in the url request

本文关键字:字段 通配符 筛选 startswith ID 请求 url OData 数字      更新时间:2024-01-24

我一直在研究一种通过OData和JavaScript对实体的数字ID字段执行模糊搜索的方法。到目前为止,我还没有找到我正在寻找的答案。我可以使用"Startswith"filter选项完美地筛选其他edm.string列,但当我试图传入任何其他非字符串类型时,我会从服务器返回类型错误响应。

在我控制数据库的应用程序中,通过创建我需要的视图并将视图的数字类型转换为字符串,我成功地绕过了这一点。然而,这似乎有点过头了,我特意为整个数据集创建了一个视图,这样我就可以允许用户通配符搜索ID,而OData查询在其他方面运行得很好。

有人找到一个好的解决方案吗?非常感谢。

不幸的是,我认为您已经发现了最好的解决方案之一(创建视图)。您还可以创建一个服务操作,允许您进行模糊搜索。

你的后端使用什么?LINQ to Entities不支持这一点,但您可以创建一个类似这样的服务操作(为了证明它可以工作,您可以在Products之后插入ToList()调用,只是确保不要将类似的东西部署到生产中:):

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class ScratchService : DataService<ScratchContext>
{
    [WebGet]
    public IQueryable<Product> FuzzySearch(string idStartsWith)
    {
        var context = new ScratchContext();
        return context.Products.Where(p => p.ID.ToString().StartsWith(idStartsWith));
    }
    // ...
}

这不是我们经常听到的问题,但我肯定可以在团队中提出,当我们开始OASIS标准化过程时,这是我们可以考虑的事情。