Linq多表分组

时间:2016-05-10 17:25:50

标签: c# entity-framework linq grouping

我似乎无法使用这些表获得正确的分组以获得我需要的结果。我有以下linq表达式,它只给我“软件标题”下的最后一项:

List<Inventory> inventoryList = (from u in users
                                 join s in db.software on u.userId equals s.ownerId
                                 select new Inventory { UserId = u.userId, FirstName = u.firstName, LastName = u.lastName, SoftwareTitle = s.title }).ToList();

var currentInventory = inventoryList.GroupBy(i => i.UserId)
                                    .Select(grp => grp.First()).ToList();

这就是我得到的结果:

名字姓氏软件名称
詹姆斯·史密斯的Photoshop
Mike Jones Microft办公室 蒂姆威廉姆斯微软办公室

我需要这样的结果:

名字姓氏软件名称
James Smith Illustrator,Microsoft Office,Photoshop
Mike Jones Visual Studio,Microft Office
Tim Williams Photoshop,Microsoft Office

我无法弄清楚如何在“s.title”上进行连接,这样它就会给我一个以逗号分隔的列表。当我尝试使用string.join(“,”,s.title.ToArray())时,我得到了一个像P,h,o,t,o,s,h,o,p这样的字符数组。

1 个答案:

答案 0 :(得分:2)

看起来你想要像

这样的东西
constructor(private x: number) {
     ...super calls, compiler error here
}

但这取决于var currentInventory = (from u in users join s in db.software on u.UserId equals s.OwnerId group s.title by u into grp select grp) .AsEnumerable() .Select(grp => new Inventory { UserId = grp.Key.userId, FirstName = grp.Key.firstName, LastName = grp.Key.lastName, SoftwareTitle = string.Join(", ", grp) }) .ToList(); 中正确设置分组的项目,我假设它们是因为您似乎正在使用EF表加入它们。这也是我将users放在那里的原因,因为AsEnumerable在EF查询中不起作用。