Linq按商品品牌分组查询时如何在select new中生成买家姓名列表
解决方法
完整查询代码
var query= from p in purchaseRepo.ReadAll() join g in guitarRepo.ReadAll() on p.GuitarId equals g.Id join b in brandRepo.ReadAll() on g.BrandId equals b.Id group p by b into grp select new { BrandId = grp.Key.Id, BrandName = grp.Key.Name, Buyers = grp.Select(t => t.BuyerName).ToList() };
关键调整说明
- 修正了之前误用
SelectMany的问题:SelectMany作用是扁平化嵌套集合,传入字符串类型的BuyerName会被拆解为字符序列,不符合需求,替换为Select直接提取买家姓名字段即可。 - 不需要提前初始化空的
List<string>,直接对Select返回的姓名序列调用ToList()方法,就能直接生成List<string>类型的买家列表赋值给Buyers属性。 - 如果需要去除同一品牌下重复的买家姓名,可在
Select后追加Distinct()方法:grp.Select(t => t.BuyerName).Distinct().ToList()。
内容的提问来源于stack exchange,提问作者bence győgyei
相关产品推荐
相关产品推荐

