Linq查询将一个表行连接到另一个表多行

r.v*_*esh 7 c# linq linq-to-entities

表名:名单


id | Name
------------
1  |xxxxx
2  |yyyyy
Run Code Online (Sandbox Code Playgroud)

表名:类别


id | Nameid |Categoryid
-----------------
1  |1       |5
2  |1       |4
3  |2       |3
4  |2       |8
Run Code Online (Sandbox Code Playgroud)

我需要像这样的linq查询结果


id | Name   |Categoryid
-----------------
1  |xxxx       |5,4
2  |yyyy       |3,8
Run Code Online (Sandbox Code Playgroud)

我尝试了linq,但它只显示了第一个类别ID

var list = from n in namelist 
           join c in category on n.id equals c.nameid 
           select new 
           { 
              n.id,
              n.name,
              c.categoryid
           }
Run Code Online (Sandbox Code Playgroud)

Rah*_*ngh 5

您可以使用“ 组加入”来执行此操作,并使用以下方法加入组中的所有类别ID String.Join:-

 var result = (from n in namelist
              join c in categories 
              on n.Id equals c.NameId into g
              select new 
                       {
                          id = n.Id,
                          Name = n.Name,
                          CategorieIds = g.Select(x => x.CategoryId)
                       }).AsEnumerable()
                         .Select(x => new 
                                   { 
                                     Id = x.id, 
                                     Name = x.Name, 
                                     CategoryIds = String.Join(",",x.CategorieIds)) 
                                   });
Run Code Online (Sandbox Code Playgroud)