Asp.net mvc OData筛选器不适用于我的Web API(mvc 4堆栈)

Asp.net mvc OData筛选器不适用于我的Web API(mvc 4堆栈),asp.net-mvc,odata,iqueryable,asp.net-web-api2,Asp.net Mvc,Odata,Iqueryable,Asp.net Web Api2,这一开始只是一个问题,因为我在让$filter=substringof语法正确工作时遇到了法律问题。在拍摄这张照片的过程中,我能够捕捉到我忽略的细节。。不过,我会为其他人发布这个问题/答案,因为我希望它能成为有用的资源 下面是我引用的几个NuGet软件包,只是为了向您展示我使用的堆栈的版本: <package id="Microsoft.AspNet.WebApi.OData" version="4.0.30506" targetFramework="net40" /> <pa

这一开始只是一个问题,因为我在让$filter=substringof语法正确工作时遇到了法律问题。在拍摄这张照片的过程中,我能够捕捉到我忽略的细节。。不过,我会为其他人发布这个问题/答案,因为我希望它能成为有用的资源

下面是我引用的几个NuGet软件包,只是为了向您展示我使用的堆栈的版本:

<package id="Microsoft.AspNet.WebApi.OData" version="4.0.30506" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi" version="4.0.20710.0" targetFramework="net40" />
<package id="Microsoft.Data.OData" version="5.2.0" targetFramework="net40" />
这是我的Web API控制器(注意:我没有使用实体框架..这只是我自己的小业务对象,我将其公开为IQueryable(注意方法装饰)

编辑: 以下是不区分大小写的搜索URL:

 localhost:27746/api/Customer/List?shiptypecode=AW&$filter=substringof(tolower('g'),tolower(DisplayLabel)) eq true&$top=40

我犯的第一个愚蠢的错误是:我用来执行自动建议逻辑的jquery小部件,URL格式写得很糟糕,我的URL中有两个问号。其中一个应该是一个符号。我一直犯的第二个错误是:对于函数的子字符串,首先是搜索的内容,然后是属性名。因此,我我必须交换参数。而且,我没有像我需要的那样将“eq true”钉在末端。我刚刚发现我的$select不起作用,如果你想进行case instive搜索,
Public Class CustomerController
    Inherits ApiController

    Private Shared queryableListOfCustomers As IQueryable

    <Queryable(AllowedQueryOptions:=OData.Query.AllowedQueryOptions.All)>
    Public Function GetList(opts As OData.Query.ODataQueryOptions) As IQueryable(Of CodeBase)
         /*
         here is where I would insert singleton logic to populate the Shared queryableListOfCustomers member 
         */
          If opts IsNot Nothing Then
            Return opts.ApplyTo(queryableListOfCustomers)
          End If

        Return queryableListOfCustomers
    End Function

End Class
 localhost:27746/api/Customer/List?shiptypecode=AW&$filter=substringof('g',DisplayLabel) eq true&$top=40&$select=Code,DisplayLabel&$inlinecount=allpages
 localhost:27746/api/Customer/List?shiptypecode=AW&$filter=substringof(tolower('g'),tolower(DisplayLabel)) eq true&$top=40