public void simple_include_for_a_single_document()
        {
            var user  = new User();
            var issue = new Issue {
                AssigneeId = user.Id, Title = "Garage Door is busted"
            };

            theSession.Store <object>(user, issue);
            theSession.SaveChanges();

            using (var query = theStore.QuerySession())
            {
                User included = null;
                var  issue2   = query.Query <Issue>()
                                .Include <User>(x => x.AssigneeId, x => included = x)
                                .Where(x => x.Title == issue.Title)
                                .Single();

                included.ShouldNotBeNull();
                included.Id.ShouldBe(user.Id);

                issue2.ShouldNotBeNull();
            }
        }
        public void include_with_any_containment_where_for_a_single_document()
        {
            var user  = new User();
            var issue = new Issue {
                AssigneeId = user.Id, Tags = new [] { "DIY" }, Title = "Garage Door is busted"
            };

            theSession.Store <object>(user, issue);
            theSession.SaveChanges();

            using (var query = theStore.QuerySession())
            {
                User included = null;
                var  issue2   = query.Query <Issue>()
                                .Include <User>(x => x.AssigneeId, x => included = x)
                                .Where(x => x.Tags.Any(t => t == "DIY"))
                                .Single();

                included.ShouldNotBeNull();
                included.Id.ShouldBe(user.Id);

                issue2.ShouldNotBeNull();
            }
        }
        public async Task include_within_batch_query()
        {
            var user1 = new User();
            var user2 = new User();

            var issue1 = new Issue {
                AssigneeId = user1.Id, Title = "Garage Door is busted #1"
            };
            var issue2 = new Issue {
                AssigneeId = user2.Id, Title = "Garage Door is busted #2"
            };
            var issue3 = new Issue {
                AssigneeId = user2.Id, Title = "Garage Door is busted #3"
            };

            theSession.Store(user1, user2);
            theSession.Store(issue1, issue2, issue3);
            theSession.SaveChanges();

            using (var query = theStore.QuerySession())
            {
                User included = null;
                var  list     = new List <User>();
                var  dict     = new Dictionary <Guid, User>();

                // SAMPLE: batch_include
                var batch = query.CreateBatchQuery();

                var found = batch.Query <Issue>()
                            .Include <User>(x => x.AssigneeId, x => included = x)
                            .Where(x => x.Title == issue1.Title)
                            .Single();
                // ENDSAMPLE

                var toList = batch.Query <Issue>()
                             .Include <User>(x => x.AssigneeId, list).ToList();

                var toDict = batch.Query <Issue>()
                             .Include(x => x.AssigneeId, dict).ToList();

                await batch.Execute();


                (await found).Id.ShouldBe(issue1.Id);

                included.ShouldNotBeNull();
                included.Id.ShouldBe(user1.Id);

                (await toList).Count.ShouldBe(3);

                list.Count.ShouldBe(2); // Only 2 users


                (await toDict).Count.ShouldBe(3);

                dict.Count.ShouldBe(2);

                dict.ContainsKey(user1.Id).ShouldBeTrue();
                dict.ContainsKey(user2.Id).ShouldBeTrue();
            }
        }