【问题标题】:Linq multiple table groupingLinq 多表分组
【发布时间】:2016-05-11 01:40:02
【问题描述】:

我似乎无法正确使用这些表进行分组以获得我需要的结果。我有以下 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
迈克                琼斯                 Microft Office
蒂姆                  威廉姆斯             Microsoft Office

我需要这样的结果:

名字       姓氏          软件名称
James             史密斯                  插画家、Microsoft Office、Photoshop
Mike                琼斯                 Visual Studio,Microft Office
蒂姆                  威廉姆斯             Photoshop、Microsoft Office

我不知道如何在“s.title”上进行连接,所以它会给我一个逗号分隔的列表。当我尝试 string.join(",", s.title.ToArray()) 时,我只得到了一个字符数组,例如 P,h,o,t,o,s,h,o,p。

【问题讨论】:

  • 您能否将集合的设置添加到问题中?
  • 数据来自数据库。我正在使用实体框架。

标签: c# entity-framework linq grouping


【解决方案1】:

看起来你想要类似的东西

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();

但这取决于users 中的项目是否正确设置为分组,我假设它们是因为您似乎将它们与 EF 表连接起来。这也是我将AsEnumerable 放在那里的原因,因为string.Join 在EF 查询中不起作用。

【讨论】:

  • 太棒了!这正是我所追求的。非常感谢。
猜你喜欢
  • 2021-02-25
  • 1970-01-01
  • 2017-09-19
  • 2013-11-27
  • 2020-08-21
  • 2012-02-02
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
相关资源
最近更新 更多