4

を返す MVC4 WebAPI コントローラーがあるIQueryableため、URL で と フレンドを使用$filterして、REST エンドポイントからの結果を操作できます。これが私のコントローラーです:

public class EnrollmentController : ApiController
{
    [Queryable]
    public IQueryable<tblEnrollment> Get()
    {
        var context = new ProjectEntities();
        context.ContextOptions.LazyLoadingEnabled = false;
        return context.tblEnrollment.AsQueryable();
    }
}

しかし、このポスターのように、JSON 出力形式を少し変更して、Ember Data の期待される形式により親しみやすくしたいと考えています。だから私は代わりにこれを返したい:

return new { enrollment = context.tblEnrollment.AsQueryable() }; 

IQueryableただし、 WebAPI レイヤーに を返していないため、OData の機能が損なわれます。そこで、次のような方法はないかと考えています。

return new { enrollment = context.tblEnrollment.AsQueryable().ApplyOData() }; 

どちらが真実であると確信しています...しかし、メソッドIQueryableから返された結果セットに対してWebAPIレイヤーに暗黙的に処理させる代わりに、ODataパラメーターを明示的に処理する方法はありますGetか? または、ここで必要なことを達成する別の方法はありますか?

ちなみに、VS2012(したがって.NET4.5、したがってEF5)にアップグレードできないため、当面はEF4にこだわっています。理論的には、EF 4.3.1 にアップグレードできます。

4

1 に答える 1

4

アクションを [Queryable] としてマークする代わりに、タイプ ODataQueryOptions のパラメーターを追加して手動で適用できます。これは次のようになります。

public class EnrollmentController : ApiController
{
    public object Get(ODataQueryOptions<tblEnrollment> query)
    {
        var context = new ProjectEntities();
        context.ContextOptions.LazyLoadingEnabled = false;
        var queryResults = query.ApplyTo(context.tblEnrollment.AsQueryable());
        return new { enrollment = queryResults };
    }
}
于 2013-01-23T15:38:31.027 に答える