6

子エンティティのコレクションに基づいてエンティティをフィルタリングしようとしています。ここに私のエンティティ(EF POCOのもの)があります:

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; }
}

Breeze js を使用して、Order.Description に「foo」という単語が含まれているすべての顧客を返したいと考えています。クエリは次のようになると想像しました。

query = entityQuery.from('Customers')
                   .where("Orders.Description", "contains", "foo");

しかし、もちろんそれはうまくいきません。何か案は?

4

2 に答える 2

13

Breeze 1.4.6 の時点で、Breeze は「any」および「all」クエリ演算子をサポートするようになりました。

参照: http://www.breezejs.com/documentation/query-examples

これは、このクエリを次のように構成できることを意味します。

var query = breeze.EntityQuery.from("Customers")
  .where("Orders", "any", "Description", "contains", "Foo");
于 2013-11-26T19:42:49.960 に答える
9

微風では無理です。Order.Description に「foo」という単語が含まれているすべての顧客を返すメソッドを backed に実装することをお勧めします。

Web API を使用している場合は、次のようになります。

query = entityQuery.from('getCustomerAnyOrderWithFooDescription');

あなたのバックエンドで:

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

また、次のようなことをより一般的に行うこともできます。

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)));
}
于 2013-04-29T12:57:43.577 に答える