public void ShouldHandleJoin()
        {
            var orders = _query.ToList().AsQueryable();
            var lines  = _query.SelectMany(o => o.Lines).ToList().AsQueryable();

            var join    = orders.Join(lines, o => o.Id, l => l.OrderId, (o, l) => o.Id + l.Id).ToList();
            var dynJoin = orders.Join(lines, "o => o.Id", "l => l.OrderId", "(o, l) => o.Id + l.Id").Cast <int>().ToList();

            Assert.Equal(join, dynJoin);

            Assert.Throws <ArgumentNullException>(() => Dyn.Join(null, null, "", "", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.Join(_query, null, "", "", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.Join(_query, _query, "", "", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.Join(_query, _query, "Id", "", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.Join(_query, _query, "Id", "Id", ""));
        }