我们在使用EF6的MVC应用程序中有3个表关系。例如,与订单表(多方面)和订单表相关的客户表与OrderItems表(多方)相关。
我们希望在数据库的 ONE TRIP 中获取所有表的所有记录和能够订购每个表。
我们知道我们可以像context.Customers.Include(“Orders.OrderItems”)一样使用include扩展来急切加载所有数据。但是当我们尝试订购每张桌子时,我们一直都会遇到错误。 例如,我们希望按CustomerId列订购Customer Table,按日期订购Orders Table列,按ProductId列订购OrderItems。
任何协助都是apreciated
答案 0 :(得分:0)
如果您有OrderItem
到Order
以及Order
到Customer
的导航属性,那么您可以订购`OrderItems&#39 ;你可以这样做:
var orderItems = context.OrderItems
// Filter if needed with .When
.Include(m => m.Order.Customer)
.OrderBy(m => m.Order.Customer.CustomerId)
.ThenBy(m => m.Order.Date)
.ThenBy(m => m.ProducetId)
.ToList();
但是,如果您想获得客户,您可以做的是加载订购的客户,如:
var customers = context.Custoemr
.Include(m => m.Orders.Select(o => o.OrderItem))
.OrderBy(m => m.CustomerId)
.ToList();
然后订购Order
和OrderItem
。由于您已加载所有数据,因此订购集合不会进行任何数据库调用,并且它将保持一次性访问数据库:
foreach(Customer customer in customers)
{
customer.Orders = customer.Orders.OrderBy(m => m.Date);
foreach (Order order in customer.Orders)
{
order.OrderItems = order.OrderItems.OrderBy(m => m.ProducetId);
}
}