2008-11-24 53 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对象和字符串列表(标签)。