1

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

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

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

4

1 回答 1

2

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

你用什么做你的后端?这在 LINQ-to-Entities 上不受支持,但您可能能够创建一个看起来像这样的服务操作(为了证明它可以工作,您可以ToList()在之后将调用塞进去,但请Products确保不要部署类似于生产的东西:)):

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

于 2012-07-23T16:12:39.597 回答