如何使用支持任何/所有过滤器创建OData v3服务

时间:2012-08-17 15:21:08

标签: c# wcf wcf-data-services odata

我需要将我的OData服务更新到第三版。现在,我只使用NuGet存储库中的new更改了旧库,并在DataServiceConfiguration中将属性MaxProtocolVersion更改为V3。
可能这还不够?有人知道,我必须做些什么来支持我的应用程序中的任何/所有过滤器?

当我尝试发送这样的请求时:
http://expamle.com/OData.svc/Contacts?$ filter = Phones / any(p:p / Number eq'111-222-333-11')

我的应用程序抛出此异常:

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <code>4</code>
    <message xml:lang="" />
        <innererror>
            <message>No property 'any' exists in type 'City' at position 5.</message>
            <type>System.Data.Services.DataServiceException</type>
        <stacktrace>
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseMemberAccess(Expression instance)
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParsePrimary()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseUnary()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseMultiplicative()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseAdditive()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseComparison()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseLogicalAnd()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseLogicalOr()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseExpression()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseWhere()
            at System.Data.Services.Parsing.RequestQueryParser.ParseLambdaForWhere(IDataService service, RequestDescription requestDescription, Type queryElementType, String expression)
            at System.Data.Services.Parsing.RequestQueryParser.Where(IDataService service, RequestDescription requestDescription, Expression source, String predicate)
            at System.Data.Services.RequestQueryProcessor.ProcessFilter() at System.Data.Services.RequestQueryProcessor.ProcessQuery()
            at System.Data.Services.RequestQueryProcessor.ProcessQuery(IDataService service, RequestDescription description)
            at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service, Boolean internalQuery)
            at System.Data.Services.DataService`1.ProcessIncomingRequestUri()
            at System.Data.Services.DataService`1.HandleRequest()
        </stacktrace>
    </innererror>
</error>

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您可能需要将WCF数据服务更新为5.0以支持v3 - 您可以下载here

答案 2 :(得分:0)

听起来城市是一个单身人士(不是一个集合),在这种情况下你不需要任何东西,这样的东西就可以正常工作:

即。 http://example.com/OData.svc/Contacts?$filter=City/Name eq 'New York'

Any / All仅适用于$ filter中引用的集合。