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", "")); }