OData:通配符(开始)过滤url请求中的数字(ID)字段

时间:2012-07-23 15:42:35

标签: javascript entity-framework-4.1 wcf-data-services odata

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

在我控制数据库的应用程序中,通过创建我需要的视图并将视图的数字类型转换为字符串,我成功地解决了这个问题。但是,这样做似乎有点过头了,为了整个数据集创建一个视图,所以我可以允许用户通配符搜索ID,否则OData查询工作得非常好。

有没有人找到一个很好的解决方案?谢谢!

1 个答案:

答案 0 :(得分:2)

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

你在后端使用什么? LINQ-to-Entities不支持此功能,但您可以创建类似于此的服务操作(为了证明它可以工作,您可以在{ToList()之后填写Products个调用。 1}},请确保不要将类似内容部署到生产中:)):

[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标准化过程时,我们可以考虑这个问题。