2013-08-02 2 views
0

ASP.NET WEB API Odata 라이브러리를 사용하고 있습니다. 내 호출에서 substringof를 사용하고 값이 null이면 실패합니다.Asp.net 웹 API 하위 문자열 null 문제

... odata/MyEntity()?$filter=substringof(null,Name) ... 그리고 그 결과는 다음과 같습니다 :

내가 지나가는 오전 URI는

<?xml version="1.0" encoding="utf-8"?> 
<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <m:code /> 
    <m:message xml:lang="en-US">The query specified in the URI is not valid.</m:message> 
    <m:innererror> 
    <m:message>The 'substringof' function cannot be applied to an enumeration-typed argument.</m:message> 
    <m:type>Microsoft.Data.OData.ODataException</m:type> 
    <m:stacktrace> at System.Web.Http.OData.Query.Expressions.FilterBinder.ValidateAllStringArguments(String functionName, Expression[] arguments)&#xD; 
    at System.Web.Http.OData.Query.Expressions.FilterBinder.BindSubstringOf(SingleValueFunctionCallNode node)&#xD; 
    at System.Web.Http.OData.Query.Expressions.FilterBinder.BindSingleValueFunctionCallNode(SingleValueFunctionCallNode node)&#xD; 
    at System.Web.Http.OData.Query.Expressions.FilterBinder.Bind(QueryNode node)&#xD; 
    at System.Web.Http.OData.Query.Expressions.FilterBinder.BindFilterClause(FilterClause filterClause, Type filterType)&#xD; 
    at System.Web.Http.OData.Query.Expressions.FilterBinder.Bind(FilterClause filterClause, Type filterType, IEdmModel model, IAssembliesResolver assembliesResolver, ODataQuerySettings querySettings)&#xD; 
    at System.Web.Http.OData.Query.FilterQueryOption.ApplyTo(IQueryable query, ODataQuerySettings querySettings, IAssembliesResolver assembliesResolver)&#xD; 
    at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, ODataQuerySettings querySettings)&#xD; 
    at System.Web.Http.QueryableAttribute.ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)&#xD; 
    at System.Web.Http.QueryableAttribute.ExecuteQuery(IEnumerable query, HttpRequestMessage request, HttpActionDescriptor actionDescriptor)&#xD; 
    at System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)</m:stacktrace> 
    </m:innererror> 
</m:error> 

그래서는 웹 API 중 하나로, OData 라이브러리에 문제가 보인다

. 그것을 막을 수있는 방법이 있습니까?

답변

1

오류가 발생했습니다. null은 결코 문자열의 부분 문자열이 아닙니다. $filter=substringof(null, Name)은 코드에서 Where(i => i.Name.Contains(null))과 같은 것으로 ArgumentNullException을 발생시킵니다.

값이 null인지 확인하려면 $filter=Name eq null과 같은 것을 사용하거나 null 또는 이름 부분 문자열인지 확인하십시오. $filter=(Name eq null) or (substringof('theValue', Name))을 사용할 수 있습니다.