Microsoft OData C#WebApi过滤或将Int转换为字符串

时间:2017-02-09 22:34:57

标签: c# asp.net-web-api odata

我目前在我的应用程序中使用第三方Grid控件,它使用odata执行服务器端过滤。当我填写搜索框时,过滤字符串意味着应用于所有字段并仅返回匹配的字段。

我有两个显示的字段,一个整数Id字段和一个字符串Name字段。应用过滤器后,Odata会提供包含过滤器的ODataQueryOptions数据类型:

(substringof('24',tolower(Id)))或(substringof('24',tolower(Name)))

预期结果是返回Id或24中名称为24的记录。

相反,这会导致异常。引发异常是因为Id是Int字段,并且字符串函数tolower和substring未在整数字段上实现。

Cast似乎也没有实现,因此我不能简单地将int转换为字符串。

对于许多其他人来说,这个问题一定是个问题。那么其他人如何解决这个问题?

(根据nuget,我使用的是Microsoft.Data.OData的v5.8.2和Microsoft.AspNet.Webapi.OData的v5.7.0。我的项目是.net framework 4.5.2)

1 个答案:

答案 0 :(得分:0)

正如casting int to string in OData raises error中所述并在https://msdn.microsoft.com/en-us/library/dd541472.aspx中进一步解释,没有从intstring的演员阵容。

您的网格控件必须发出如下所示的正确查询:

Id eq 24 or (substringof('24',tolower(Name)))

如果您无法在原始方面更改查询,则可以自己重写ODataQueryOptions,我在Modifying ODataQueryOptions on the fly中对此进行了描述。该帖子基本上向您展示了如何提取当前的ODataQueryOptions并从中构建一个新的Uri,可用于创建新的ODataQueryOptions。