簡體   English   中英

Linq查詢將一個表行連接到另一個表多行

[英]Linq query join one table row to another table multiple row

表名:名單


id | Name
------------
1  |xxxxx
2  |yyyyy

表名:類別


id | Nameid |Categoryid
-----------------
1  |1       |5
2  |1       |4
3  |2       |3
4  |2       |8

我需要像這樣的linq查詢結果


id | Name   |Categoryid
-----------------
1  |xxxx       |5,4
2  |yyyy       |3,8

我嘗試了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
           }

您可以使用Group Join執行此操作,並使用String.Join加入組中的所有類別ID,如下所示: -

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

你可以試試String.Join

var list = namelist
    .Select(n => new { 
        n.id,
        n.name,
        categoryids = String.Join(",", category
            .Where(c => c.nameid == n.id)
            .Select(c => c.categoryid))
    });

使用String.Join() 我修改了你的陳述:

var list = from n in namelist 
           join c in category on n.id equals c.nameid 
           group g by new { n.id, n.name }
           select new 
           { 
              id = g.Key.id,
              Name = g.Key.name,
              Categoryid = String.Join(",", g.Select(x => x.c.categoryid))
           }

首先,您在NameListCategory表上進行連接,然后使用ToListAsEnumerable方法將它們帶入對象

var list = (from n in db.NameList 
           join c in db.Category on n.id equals c.nameid 
           select new 
           { 
              id = n.id,
              Name = n.name,
              Categoryid = c.id
           }).ToList();
var list2 = from l in list
group by new {l.id, l.Name} into groupings
from g in groupings select new{
   g.Key.id,
   g.Key.Name,
   CategoryId = string.Joing(",", groupings.Where(x=>x.NameId == g.Key.id).Select(y=>y.CategoryId))
};

使用ToList從數據庫中獲取數據的好處是,您將只在數據庫中進行一次查詢,並在內存中獲取所有必需的記錄。 第二個語句將按idName對這些記錄進行分組,並將在CategoryId上應用string.Join 請注意,如果在Linq-to-Entities查詢中使用string.join方法,則會失敗,因為此方法無法轉換為sql表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM