2013-04-29 1 views
5

Ich versuche, Entitäten basierend auf einer Sammlung von untergeordneten Entitäten zu filtern. Hier sind meine Einheiten (EF POCO):Wie filtern Sie die Sammlungen von untergeordneten Objekten in Breeze JS?

public class Customer 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public ICollection<Order> Orders { get; set; } 
} 

public class Order 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

Mit Breeze js Ich möchte alle Kunden zurückkehren, wo jeder Order.Description enthält das Wort ‚foo‘. Ich stellte mir vor, die Abfrage ähnlich aussehen:

Aber natürlich wird das nicht funktionieren. Irgendwelche Ideen?

+0

Breeze jetzt dieses Szenario unterstützt: http://www.breezejs.com/documentation/query-examples# Where Klauseln auf verwandten Eigenschaften – robasta

Antwort

8

Es ist nicht mit Brise möglich. Ich empfehle Ihnen, eine Methode in Ihre Backed zu implementieren, die alle Kunden zurückgibt, wo eine Order.Description das Wort "foo" enthält.

query = entityQuery.from('getCustomerAnyOrderWithFooDescription'); 

im Backend:

Wenn Sie Web-API verwenden wäre es etwas ähnlich sein

[HttpGet] 
public IQueryable<Customer> getCustomerAnyOrderWithFooDescription() 
{ 
    return _contextProvider.Context.Customers.Where(c.Orders.Any(o => o.Description.Contains('foo'))); 
} 

Auch können Sie tun, dass allgemeinere etwas zu tun, wie folgt aus:

query = entityQuery.from('getCustomerAnyOrderWithDescription').withParameters('foo'); 

[HttpGet] 
public IQueryable<Customer> getCustomerAnyOrderWithDescription([FromBody] String someText) 
{ 
    return _contextProvider.Context.Customers 
     .Where(c.Orders.Any(o => o.Description.Contains(someText))); 
} 
+0

zweite Lösung funktioniert perfekt, danke! – mortware

12

Ab Breeze 1.4.6 unterstützt Breeze nun die Abfrageoperatoren "any" und "all".

See: http://www.breezejs.com/documentation/query-examples

Dies bedeutet, dass diese Abfrage nun zusammengesetzt werden können, wie:

var query = breeze.EntityQuery.from("Customers") 
    .where("Orders", "any", "Description", "contains", "Foo"); 
+0

Immer wenn ich diese Syntax versuche, bekomme ich den folgenden Fehler: "TypeError: a ist undefined" –

+0

Ich kann es auch nicht funktionieren. Hat jemand Glück gehabt? – newman

+0

Ja, ich habe es mit einem OData-Backend gut funktionieren. Dies sollte jetzt die akzeptierte Antwort sein, da die aktuelle veraltet ist. –

Verwandte Themen