0

プロセス(Processoクラス)のすべてのID(前にフィルターと順序を適用)を返したいのですが、次のようになります。

URL:api/processos/getIds?&$filter=(Id eq 1)

public IEnumerable<int> getIds(ODataQueryOptions opts)
{
    var results = Repositorio.Query<Processo>();

    results = opts.ApplyTo(results) as IQueryable<Processo>;

    return results.Select(p => p.Id).ToArray();
}

エラー

WebApiプリミティブ配列エラー

完全な画像: http: //i.stack.imgur.com/gzJ7n.jpg


例外

System.ArgumentException was unhandled by user code
  HResult=-2147024809
  Message=Cannot apply ODataQueryOptions of 'System.Int32' to IQueryable of 'CreditoImobiliarioBB.Model.Processo'.
Parameter name: query
  Source=System.Web.Http.OData
  ParamName=query
  StackTrace:
       at System.Web.Http.OData.Query.ODataQueryOptions`1.ValidateQuery(IQueryable query)
       at System.Web.Http.OData.Query.ODataQueryOptions`1.ApplyTo(IQueryable query)
       at CreditoImobiliarioBB.Web.Api.processosController.getIds(ODataQueryOptions opts) in w:\Clients\creditoimobiliariobb.com.br\src\CreditoImobiliarioBB\CreditoImobiliarioBB.Web\Api\processosController.cs:line 39
       at lambda_method(Closure , Object , Object[] )
       at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.<GetExecutor>b__c(Object instance, Object[] methodParameters)
       at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
       at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.<>c__DisplayClass5.<ExecuteAsync>b__4()
       at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)
  InnerException: 
4

1 に答える 1

2

ODataQueryOptionsに型引数を指定する必要があります。指定しない場合、アクションの戻り型を使用してオプションを作成します。修正されたコードは次のとおりです。

public IEnumerable<int> getIds(ODataQueryOptions<Processo> opts)
{
    var results = Repositorio.Query<Processo>();

    results = opts.ApplyTo(results) as IQueryable<Processo>;

    return results.Select(p => p.Id).ToArray();
}
于 2013-03-09T13:25:17.777 に答える