Repro code:
public class BlahController : ApiController
{
[Queryable]
public IQueryable<User> Get()
{
return new List<User>()
{
new User() { FirstName = "A", LastName = "AL", Age = 10 },
new User() { FirstName = "B", LastName = "BL", Age = 50 },
new User() { FirstName = "C", LastName = "CL", Age = 25 },
}.AsQueryable();
}
}
public class Address
{
public string StreetName { get; set; }
}
[DataContract]
public class User
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
public int Age { get; set; }
[DataMember]
public Address Address { get; set; }
}
Test request:
http://localhost:1592/api/Blah?$filter=Address+ne+null
Expected:
Returns records which has Address property not equal to null.
Actual:
Report 500 error
<Error><Message>An error has occurred.</Message><ExceptionMessage>The method or operation is not implemented.</ExceptionMessage><ExceptionType>System.NotImplementedException</ExceptionType><StackTrace> at Microsoft.Data.OData.Query.MetadataBinder.BindPropertyAccess(PropertyAccessQueryToken propertyAccessToken)
at Microsoft.Data.OData.Query.MetadataBinder.Bind(QueryToken token)
at Microsoft.Data.OData.Query.MetadataBinder.BindBinaryOperator(BinaryOperatorQueryToken binaryOperatorToken)
at Microsoft.Data.OData.Query.MetadataBinder.Bind(QueryToken token)
at Microsoft.Data.OData.Query.MetadataBinder.ProcessFilter(QueryNode query, QueryToken filter)
at Microsoft.Data.OData.Query.MetadataBinder.BindTree(SyntacticTree syntax)
at Microsoft.Data.OData.Query.MetadataBinder.BindQuery(SyntacticTree syntax)
at Microsoft.Data.OData.Query.SemanticTree.ParseUri(Uri queryUri, Uri serviceBaseUri, IEdmModel model, Int32 maxDepth)
at Microsoft.Data.OData.Query.SemanticTree.ParseUri(Uri queryUri, Uri serviceBaseUri, IEdmModel model)
at System.Web.Http.OData.Query.FilterQueryOption.get_QueryNode() in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\FilterQueryOption.cs:line 68
at System.Web.Http.OData.Query.FilterQueryOption.ApplyTo(IQueryable query, Boolean handleNullPropagation, IAssembliesResolver assembliesResolver) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\FilterQueryOption.cs:line 100
at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, Boolean handleNullPropagation, Boolean canUseDefaultOrderBy) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\ODataQueryOptions.cs:line 213
at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, Boolean handleNullPropagation) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\ODataQueryOptions.cs:line 191
at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\ODataQueryOptions.cs:line 180
at System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\QueryableAttribute.cs:line 168
at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext, HttpResponseMessage response, Exception exception)
at System.Web.Http.Filters.ActionFilterAttribute.<>c__DisplayClass2.<System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync>b__0(HttpResponseMessage response)
at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass41`2.<Then>b__40(Task`1 t)
at System.Threading.Tasks.TaskHelpersExtensions.ThenImpl[TTask,TOuterResult](TTask task, Func`2 continuation, CancellationToken cancellationToken, Boolean runSynchronously)</StackTrace></Error>
Comments: looks like a uri parser bug. @Hongye: can you open a bug on the OData team to track it ?
public class BlahController : ApiController
{
[Queryable]
public IQueryable<User> Get()
{
return new List<User>()
{
new User() { FirstName = "A", LastName = "AL", Age = 10 },
new User() { FirstName = "B", LastName = "BL", Age = 50 },
new User() { FirstName = "C", LastName = "CL", Age = 25 },
}.AsQueryable();
}
}
public class Address
{
public string StreetName { get; set; }
}
[DataContract]
public class User
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
public int Age { get; set; }
[DataMember]
public Address Address { get; set; }
}
Test request:
http://localhost:1592/api/Blah?$filter=Address+ne+null
Expected:
Returns records which has Address property not equal to null.
Actual:
Report 500 error
<Error><Message>An error has occurred.</Message><ExceptionMessage>The method or operation is not implemented.</ExceptionMessage><ExceptionType>System.NotImplementedException</ExceptionType><StackTrace> at Microsoft.Data.OData.Query.MetadataBinder.BindPropertyAccess(PropertyAccessQueryToken propertyAccessToken)
at Microsoft.Data.OData.Query.MetadataBinder.Bind(QueryToken token)
at Microsoft.Data.OData.Query.MetadataBinder.BindBinaryOperator(BinaryOperatorQueryToken binaryOperatorToken)
at Microsoft.Data.OData.Query.MetadataBinder.Bind(QueryToken token)
at Microsoft.Data.OData.Query.MetadataBinder.ProcessFilter(QueryNode query, QueryToken filter)
at Microsoft.Data.OData.Query.MetadataBinder.BindTree(SyntacticTree syntax)
at Microsoft.Data.OData.Query.MetadataBinder.BindQuery(SyntacticTree syntax)
at Microsoft.Data.OData.Query.SemanticTree.ParseUri(Uri queryUri, Uri serviceBaseUri, IEdmModel model, Int32 maxDepth)
at Microsoft.Data.OData.Query.SemanticTree.ParseUri(Uri queryUri, Uri serviceBaseUri, IEdmModel model)
at System.Web.Http.OData.Query.FilterQueryOption.get_QueryNode() in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\FilterQueryOption.cs:line 68
at System.Web.Http.OData.Query.FilterQueryOption.ApplyTo(IQueryable query, Boolean handleNullPropagation, IAssembliesResolver assembliesResolver) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\FilterQueryOption.cs:line 100
at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, Boolean handleNullPropagation, Boolean canUseDefaultOrderBy) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\ODataQueryOptions.cs:line 213
at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, Boolean handleNullPropagation) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\ODataQueryOptions.cs:line 191
at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\OData\Query\ODataQueryOptions.cs:line 180
at System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext) in C:\dd\DevDiv\Offcycle\WPT\WebStackRuntime\runtime\src\System.Web.Http.OData\QueryableAttribute.cs:line 168
at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext, HttpResponseMessage response, Exception exception)
at System.Web.Http.Filters.ActionFilterAttribute.<>c__DisplayClass2.<System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync>b__0(HttpResponseMessage response)
at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass41`2.<Then>b__40(Task`1 t)
at System.Threading.Tasks.TaskHelpersExtensions.ThenImpl[TTask,TOuterResult](TTask task, Func`2 continuation, CancellationToken cancellationToken, Boolean runSynchronously)</StackTrace></Error>
Comments: looks like a uri parser bug. @Hongye: can you open a bug on the OData team to track it ?