RKP*_*RKP 7 c# linq sql-server c#-4.0
我有一个数据库查询,它以平面格式返回分层数据.例如客户,订单和订单商品(仅举例,我的数据不同).如何将其转换为分层对象集合,即客户对象的集合,其中每个客户对象具有订单对象的集合,并且每个订单对象具有订单项对象的集合.它只是循环遍历每个项目并手动构建对象层次结构的情况还是有更好的方法来实现这一点吗?我不使用LINQ.我从SQL Server数据库存储过程中获取数据.编辑:我没有使用LINQ从数据库中检索数据,但我可以使用它来处理数据一旦检索到将其转换为所需的格式,如果这解决了问题.
编辑:示例数据看起来像这样(通过加入客户,订单和订单商品表检索)(抱歉格式不佳,我不知道如何在编辑器中格式化)
CustId CustName OrderId OrderName OrderItemId OrderItemName
C1 Cust1 O1 Order1 OI1 OrderItem1
C1 Cust1 O1 Order1 OI2 OrderItem2
C1 Cust1 O2 Order2 OI3 OrderItem3
C1 Cust1 O2 Order2 OI4 OrderItem4
C2 Cust2 O3 Order3 OI5 OrderItem5
C2 Cust2 O3 Order3 OI6 OrderItem6
C2 Cust2 O4 Order4 OI7 OrderItem7
C2 Cust2 O4 Order4 OI8 OrderItem8
首先,结果集必须按正确的顺序排列。这意味着,客户必须先于订单,并且他们必须先于订单项目出现在结果集中。
排序:客户->订单->订单项目
有了这些知识,您只需迭代该集合一次。
元代码:
foreach (item in resultset)
{
// Build a customer and order dictionary
if (!CustomerDictionary.Contains(item.Customer.Id)
CustomerDictionary.Add(item.Customer.Id, item.Customer)
if (!OrderDictionary.Contains(item.Order.Id)
OrderDictionary.Add(item.Order.id, item.Order)
// Now add the association
var customer = CustomerDictinoary[item.Customer.Id];
customer.AddOrder(item.Order);
var order = OrderDictinoary[item.Order.id];
order.AddOrderItem(item.OrderItem);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2314 次 |
| 最近记录: |