2017-03-03 42 views
0

我在微風控制器上有一個自定義/專門的.NET控制器方法。它查詢數據庫(EF6)和一些處理並吐出結果。我們通過Breeze通過withParameters的幾個自定義參數來查詢它。

如果我們需要過濾EF查詢,我們需要添加更多的自定義參數。有沒有辦法將Breeze @filter正常參數應用到我們自己的IQueryable?喜歡的東西:

var q = db.Widgets.Where(w => w.isAwesome); 
q = Breeze.ApplyFilter(request, q); 
var x = q.ToList(); 

我試圖避免將所有的字段自定義參數和避免解析查詢語法到EF可查詢的,因爲這是已經完成(的地方)。

回答

0

關鍵是將ODataQueryOptions參數添加到您的方法中。 WebAPI將使用解析的過濾參數填充選項,並且可以在執行其他處理之前或之後將選項應用於您的IQueryable

[HttpGet] 
public IList<Widget> Widgets(ODataQueryOptions queryOptions, bool coolOnly) 
{ 
    IQueryable<Widget> q = db.Widgets.Where(w => w.isAwesome); 
    if (coolOnly) { 
     q = q.Where(w => w.isCool); 
    } 

    q = queryOptions.ApplyTo(q).Cast<Widget>(); 
    var list = q.ToList(); 

    return list; 
} 
+0

嗯,我試過,但它是空的,而$過濾器中有一個eq子句。 – Josh

+0

您需要在控制器類上有'[BreezeController]'屬性,和/或Widgets方法中的[BreezeQueryable]'屬性。這告訴WebAPI將方法視爲Queryable,並添加ODataQueryOptions參數。 –

+0

我們實際上有'[EnableBreezeQuery(MaxExpansionDepth = 6)]';是錯誤的屬性(或單獨)? – Josh

相關問題