嗨我有实体模型,让我们说3个实体就像所有相关的当然:
1.-----Costumers-------
CustomerId
CustomerName
2.----CustomersOrders-----
CustomerId
OrderId
Total
3.---Orders------
OrderId
OrderName
我想在GridView中显示某些客户的订单,如下所示:
----------|----------
OrderName|Total
----------|----------
My order | 10000
但问题是实体数据源给我订单ID而不是名称如何使用它来获取订单的相关OrderName?
非常感谢....
答案 0 :(得分:2)
我假设您已经定义了具有导航属性的三个实体,这些实体将Customers连接到CustomersOrders,CustomersOrders连接到Orders。如果不使用实体模型设计器,您可以在其中右键单击实体并添加实体之间的相关关联。请记住检查您是否正在生成导航属性。 如果模型上下文设置如此,则可以直接查询客户的订单。有几种方法可以做到这一点。其中一个可能是LINQ表达式:
using (var context = new MyEntityContext())
{
var query = from customerOrder
in context.CustomersOrders
where customerOrder.CustomerId.Equals(myCustomerId)
select customerOrder;
myGridView.ItemsSource = query.ToList();
}
这里我假设你在myCustomerId中有一个customerId。如果你只有一个名字,而不是一个Id,你可以这样做:
using (var context = new MyEntityContext())
{
var query = from customerOrder
in context.CustomersOrders.Include("Orders")
where customerOrder.Customer.Name.Equals(myCustomerName)
select customerOrder;
myGridView.ItemsSource = query.ToList();
}
在上面我假设您从CustomersOrders到Customer的导航属性称为“Customer”。 “包含”确保关联的订单被加载。如果没有包含,ToList调用将假定您不需要订单,并且您将无法在GridView中引用它们。
在网格视图中,您可以使用Path = Order.OrderName绑定到OrderName,并使用Path = Total绑定到Total。在这里,我假设您从CustomersOrders到Orders的导航属性称为“订单”。