code_junkie

Using LINQ with stored procedure that returns multiple instances of the same entity per row

Nov 13th, 2011
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. OrderID InvAddrID DelAddrID InvStreet DelStreet InvZipCode DelZipCode
  2. 1 27 46 Main St Back St abc123 xyz789
  3.  
  4. Create view OrderAddress as
  5. Select o.OrderID
  6. ,i.AddressID as InvID
  7. ,d.AddressID as DelID
  8. ...
  9. from Orders o
  10. left join Addresses i
  11. on o.InvAddressID= i.AddressID
  12. left join Addresses d
  13. on o.DelAddressID = i.AddressID
  14.  
  15. var qry = from row in ctx.MainUdf(id)
  16. select new {
  17. Order = ctx.GetOrder(row.OrderId),
  18. InvoiceAddress = ctx.GetAddress(row.InvoiceAddressId),
  19. DeliveryAddress = ctx.GetAddress(row.DeliveryAddressId)) };
  20.  
  21. public List<Order> GetOrders()
  22. {
  23. // our DBML classes
  24. List<Order> dbOrders = new List<Order>();
  25.  
  26. using (OrderSystemDataContext db = new OrderSystemDataContext())
  27. {
  28. // call stored proc
  29. var spOrders = db.usp_GetOrders();
  30.  
  31. foreach (var spOrder in spOrders)
  32. {
  33. Order ord = new Order();
  34. Address invAddr = new Address();
  35. Address delAddr = new Address();
  36.  
  37. // set all the properties
  38. ord.OrderID = spOrder.OrderID;
  39.  
  40. // add the invoice address
  41. invAddr.AddressID = spOrder.InvAddrID;
  42. invAddr.Street = spOrder.InvStreet;
  43. invAddr.ZipCode = spOrder.InvZipCode;
  44. ord.InvoiceAddress = invAddr;
  45.  
  46. // add the delivery address
  47. delAddr.AddressID = spOrder.DelAddrID;
  48. delAddr.Street = spOrder.DelStreet;
  49. delAddr.ZipCode = spOrder.DelZipCode;
  50. ord.DeliveryAddress = delAddr;
  51.  
  52. // add to the collection
  53. dbOrders.Add(ord);
  54. }
  55. }
  56.  
  57. // at this point I have a List of orders I can query...
  58. return dbOrders;
  59. }
Add Comment
Please, Sign In to add comment