在Linqtosql中,如何显示单个字段中多行的项目。Linqtosql - 加入的行
例如我有一个3表设置标记(实体,标记,entitytag)全部通过外键链接。
对于每个实体,我想在一个字段中返回名称,然后在第二个字段中返回所有相关标签。
例如Item1,tag1; TAG2; tag3 Item2,tag4,tag5 ....
VB语句首选。
感谢 杰夫
在Linqtosql中,如何显示单个字段中多行的项目。Linqtosql - 加入的行
例如我有一个3表设置标记(实体,标记,entitytag)全部通过外键链接。
对于每个实体,我想在一个字段中返回名称,然后在第二个字段中返回所有相关标签。
例如Item1,tag1; TAG2; tag3 Item2,tag4,tag5 ....
VB语句首选。
感谢 杰夫
好了,不知道这是最有效的方式,但它的工作原理。
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)
有了这个答案我假设你有类似如下的表格设置,名称是不是很大,只是为了说明:
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对象和字符串列表(标签)。
对于你想要做的事,这是我能想到的最好的方式。 – 2008-11-24 17:29:36