2008-11-24 50 views
1

在Linqtosql中,如何顯示單個字段中多行的項目。Linqtosql - 加入的行

例如我有一個3表設置標記(實體,標記,entitytag)全部通過外鍵鏈接。

對於每個實體,我想在一個字段中返回名稱,然後在第二個字段中返回所有相關標籤。

例如Item1,tag1; TAG2; tag3 Item2,tag4,tag5 ....

VB語句首選。

感謝 傑夫

回答

1

好了,不知道這是最有效的方式,但它的工作原理。

Dim dc As New DataContext 

Dim query = From i In dc.Items _ 
      Let tags = (From t In dc.ItemTags _ 
         Where t.ItemID = i.ID _ 
         Select t.Tag.Name).ToArray _ 
      Select i.ItemName, Tags = String.Join(" | ", tags) 
+0

對於你想要做的事,這是我能想到的最好的方式。 – 2008-11-24 17:29:36

0

有了這個答案我假設你有類似如下的表格設置,名稱是不是很大,只是爲了說明:

AnEntity:ID,姓名
ATAG:ID,標籤名
EntityTag:ENTITYID(FK到AnEntity.Id),標籤識別(FK到ATag.Id)

你可以試試這個:

var entityTags = from ent in theEntities 
       from enttags in ent.EntityTags 
       group enttags by enttags.AnEntity into entityGroup 
       select new { TheEntity = entityGroup.Key, TheTags = 
           from t in entityGroup 
           select t.ATag.TagName }; 

我還沒有能夠真正測試這個,今天下午我會給它一個鏡頭,並在需要時進行編輯。這裏發生的是一個SelectMany。 '來自dc.AnEntities'獲取所有實體記錄,然後下一個'來自ent.EntityTags的enttags'獲取每個實體的所有實體標籤記錄。該團隊通過做非常多的事情,通過AnEntity對EntityTag記錄進行分組。把它們放在一個匿名類型中,你很好走。

編輯:
好的,改變了上面的代碼,它現在的作品。在獲得EntityTag對象列表之前,現在您可以獲得該實體的Entiy對象和字符串列表(標籤)。