我要从存储过程中返回三个多重结果集,并将其绑定到三个列表中(将某些限制作为单个reslt集返回)。 我想做一个包含所有列表数据的最终列表。
Ex :
Resultset1(OrderList)
Orderid customerid ordernumber ordername
Resultset2(CustomerList)
orderid customerid customernumber customername
Resultset3(OrderCustomerList)
orderid customerid productname cost
将此结果集分配到每个列表中。
我想要下面的最终列表,如果该订单有客户详细信息,我想绑定客户详细信息,否则类似 有关产品的详细信息。
Final list
orderid : 1234,
customerid :as12,
ordernumber : 23456,
ordername : "xyz",
customerdetails : [{ "key" : "customernumber" "value" : 1234 },{ "key" :
"customername" "value" : "abc" } ],
productdetails : [{ "key" : "productname" "value" : "west" },{ "key" :
"cost" "value" : 90} ]
当前每个循环都使用。首先循环订单列表,然后再次循环客户和订单客户列表,并检查是否 该订单是否包含客户和订单客户数据。如果有,则绑定数据,否则将其设置为null。
总有办法做到这一点,而不是foreach循环,因为如果它是1000条记录,那么将进行1000次外循环,而也会进行内循环 很多次,这会影响性能。
答案 0 :(得分:0)
我想您可以通过一次往返调用从数据库中获取所有结果集,而您的问题不是多次数据库调用,而是嵌套for循环和列表查找的性能。
如果这是真的,那么您可以将订单和客户列表转换为字典以进行快速查找O(1),然后对OrderCustomerList进行单次for循环,然后在该循环中从字典中获取所需的订单或客户详细信息。
var orderDetails = result1.ToDictionary(order => order.orderid);
var customerDetails = result2.ToDictionary(customer => customer.customerid);
...
// get order by id.
var order = orderDetails[orderId];
答案 1 :(得分:0)
您可以加入3个列表,然后选择所需的任何内容:
var query = from order in Resultset1
join cust in Resultset2
on order.orderid equals cust.orderid && order.customerid equals cust.customerid
select new { cust.orderid, cust.customerid, cust.customernumber, cust.customername, order.ordernumber, order.ordername} into mid
join ocl in Resultset3
on mid.orderid equals ocl.orderid && mid.customerid equals ocl.customerid
select new {
mid.orderid,
mid.customerid,
mid.customernumber,
mid.customername,
mid.ordernumber,
mid.ordername,
ocl.productname
}
如果orderid是唯一的,那么您可以像
一样加入on order.orderid equals cust.orderid
代替
on order.orderid equals cust.orderid && order.customerid equals cust.customerid