2017-03-03 5 views
0

사용자 지정/특수화 된 .NET 컨트롤러 메서드가 breeze 컨트롤러에 있습니다. 데이터베이스 (EF6)와 일부 처리를 쿼리하고 결과를 출력합니다. 우리는 withParameters을 통해 몇 가지 맞춤 매개 변수를 사용하여 Breeze를 통해 쿼리합니다.

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

흠, 나는 그것을 시험해 보았지만, $ filter는 그것에 eq 절이있는 반면 null이었다. – Josh

+0

컨트롤러 클래스에는'[BreezeController]'속성이 있어야하고, 위젯 메소드에는'[BreezeQueryable]'속성이 있어야합니다. 이는 WebAPI에 메소드를 Queryable로 처리하고 ODataQueryOptions 매개 변수를 추가하도록 지시합니다. –

+0

우리는 실제로'[EnableBreezeQuery (MaxExpansionDepth = 6)]'를 가지고 있습니다; 그것이 잘못된 속성입니까 (아니면 별도입니까?)? – Josh