示例#1
0
        public void QueryAllCustomersWithOrders()
        {
            var q = context.CreateQuery <IQDSP.Customer>("Customers").Expand("Orders");

            int totalCustomerCount = q.Count();
            int totalOrdersCount   = context.CreateQuery <IQDSP.Order>("Orders").Count();

            var qor = q.Execute() as QueryOperationResponse <IQDSP.Customer>;

            DataServiceQueryContinuation <IQDSP.Customer> nextCustLink = null;
            int custCount  = 0;
            int orderCount = 0;

            do
            {
                ICollection previousOrderCollection = null;

                foreach (var c in qor)
                {
                    try
                    {
                        if (previousOrderCollection != null)
                        {
                            qor.GetContinuation(previousOrderCollection);
                            Assert.Fail("Out of scope collection did not throw");
                        }
                    }
                    catch (ArgumentException)
                    {
                    }

                    var nextOrderLink = qor.GetContinuation(c.Orders);
                    while (nextOrderLink != null)
                    {
                        if (custCount % 2 == 0)
                        {
                            var innerQOR = context.Execute <IQDSP.Order>(nextOrderLink) as QueryOperationResponse <IQDSP.Order>;
                            foreach (var innerOrder in innerQOR)
                            {
                                context.AttachLink(c, "Orders", innerOrder);
                                c.Orders.Add(innerOrder);
                            }
                            nextOrderLink = innerQOR.GetContinuation();
                        }
                        else
                        {
                            nextOrderLink = context.LoadProperty(c, "Orders", nextOrderLink).GetContinuation();
                        }
                    }

                    previousOrderCollection = c.Orders;

                    orderCount += c.Orders.Count;
                    custCount++;
                }

                nextCustLink = qor.GetContinuation();
                if (nextCustLink != null)
                {
                    qor = context.Execute <IQDSP.Customer>(nextCustLink) as QueryOperationResponse <IQDSP.Customer>;
                }
            } while (nextCustLink != null);

            Assert.AreEqual(totalCustomerCount, custCount);
            Assert.AreEqual(totalOrdersCount, orderCount);
            Assert.AreEqual(totalOrdersCount, context.Links.Count);
            Assert.AreEqual(totalCustomerCount + totalOrdersCount, context.Entities.Count);
        }