2010-09-18 158 views
0

嗨,我有实体模型让说3实体,像这样所有相关课程:实体框架

1.-----Costumers------- 
    CustomerId 
    CustomerName 

2.----CustomersOrders----- 
    CustomerId 
    OrderId 
    Total 

3.---Orders------ 
    OrderId 
    OrderName 

而且我想在GridView中像这样显示一些负荷消费的订单:

----------|---------- 
OrderName|Total 
----------|---------- 
My order | 10000 

但问题是实体数据源给我的订单id而不是名称我怎样才能使用它来获得相关OrderName的订单?

非常感谢....

+1

请问你能更清楚地描述你的问题吗?你也没有写出你的查询表达式是什么样的,或者你正在使用什么语言。 – Holstebroe 2010-09-18 12:44:01

回答

2

我假设你已经与导航性能的客户来CustomersOrders和CustomersOrders连接到订单中定义的三个实体。如果不使用实体模型设计器,您可以右键单击实体并在实体之间添加相关关联。请记得检查您是否正在生成导航属性。 如果模型上下文被设置成这样,它可以直接查询客户的订单。有几种方法可以做到这一点。其中一个可能是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。如果你只有一个名字,不是一个编号,你可以这样做:

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到客户您的导航属性被称为“客户”。 “包含”确保关联订单被加载。如果不包含,ToList调用将假定您不需要该命令,并且您将无法在GridView中引用它们。

在您的网格视图中,您可以使用Path = Order.OrderName和Total with Path = Total绑定到OrderName。在这里,我假设您从CustomersOrders到订单的导航属性被称为“订单”。