1

我使用 JayData 库,我想知道是否可以在 JayData 中模拟内部连接,例如:

Customers inner join Orders on
Customers.CustomerID = Orders.CustomerID

怎么可能?

4

1 回答 1

1

JayData 在当前版本中通常不支持 AdHoc 连接。虽然它在路线图上。

但是,根据您的需求和底层数据提供者,可以通过多种方式实现类似的行为。我假设您正在使用 OData 提供程序。

在这种情况下,您可以使用导航属性来表示关系,从而实现对查询的隐式连接。

实体和上下文定义:

$data.Entity.extend("Customer", {
 Id: { key: true, computed: true, type: 'int' },
 Name: { type:string },
 Orders: { type: $data.EntitySet, elementType: 'Order', inverseProperty: 'Customer' }
});

$data.Entity.extend("Order" {
 Id: { key: true, computed: true, type: 'int' },
 Customer: { type: Customer, inverseProperty: 'Orders' }
});

$data.EntityCotnext.extend("CustomerOrders", {
  Customers: { type: $data.EntitySet, elementType: Customer },
  Orders: { type: $Data.EntitySet, elementType: Order }
});

1)按客户查询订单:

context.Orders.filter( function(order) {
  return order.Customer.Name.startsWith('John');
}).toArray(...)

2)按订单查询客户:这是JayData 1.1中发布的新功能(确保更新您的文件)

ordersQuery = context.Orders.filter( function(order) { return order.Value > 200 });

context.Customers.filter( function(customer) {
 return custom.Orders.some(ordersQuery);
}).toArray(...);
于 2012-06-28T11:02:54.517 回答