我正在尝试使用动态LINQ进行GroupBy,但无法使其工作.
这是一些说明问题的示例代码:
ListlistAlbums = new List (); for (int i = 0; i < 5000; i++) { dtoMyAlbum album = new dtoMyAlbum { Author = "My Author", BookID = i, CurrSymbol = "USD", Price = 23.23, Shop = i % 3 == 0 ? "TESCO" : "HMV" }; listAlbums.Add(album); } IQueryable mydata = listAlbums.AsQueryable(); int count = mydata.Count(); //var mydataGrouped = mydata.GroupBy(a => a.Shop); // <-- this works well (but is not dynamic....) var mydataGrouped = mydata.GroupBy("Shop"); // <-- does not compile but is kind of what I want... foreach (var group in mydataGrouped) { //count = group.Count(); }
我意识到我在GroupBy重载中缺少'elementSelector',但我想做的就是最终得到(在这种情况下)两组dtoMyAlbum对象,所以我希望为所有集合选择所有元素......
我该怎么做?
默认it
定义,您可以使用它来返回匹配的元素:
var mydataGrouped = mydata.GroupBy("Shop", "it");
要遍历结果,您还应该使用其他Select
元素命名并使用dynamic
s:
var mydataGrouped = mydata.GroupBy("Shop", "it").Select("new (it.Key as Shop, it as Albums)"); foreach (dynamic group in mydataGrouped) { foreach (dynamic album in group.Albums) { Console.WriteLine(album.Author); } }