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

            var group1    = lines.GroupBy(l => l.OrderId, l => l.Id, (k, lid) => lid.Count()).ToList();
            var dynGroup1 = lines.GroupBy("l => l.OrderId", "l => l.Id", "(k, lid) => lid.Count()").Cast <int>().ToList();

            var group2    = lines.GroupBy(l => l.OrderId, (k, l) => l.Count()).ToList();
            var dynGroup2 = lines.GroupBy("l => l.OrderId", "(k, l) => l.Count()").Cast <int>().ToList();

            var group3    = lines.GroupBy(l => l.OrderId).ToList();
            var dynGroup3 = lines.GroupBy("l => l.OrderId").Cast <IGrouping <int, OrderLine> >().ToList();

            Assert.Equal(group1, dynGroup1);
            Assert.Equal(group2, dynGroup2);
            Assert.Equal(group3, dynGroup3);
            Assert.Throws <ArgumentNullException>(() => Dyn.GroupBy(null, ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.GroupBy(_query, ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.GroupBy(null, "", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.GroupBy(_query, "", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.GroupBy(_query, "Id", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.GroupBy(null, "", "", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.GroupBy(_query, "", "", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.GroupBy(_query, "Id", "", ""));
            Assert.Throws <ArgumentNullException>(() => Dyn.GroupBy(_query, "Id", "Id", ""));
        }