【发布时间】:2008-11-25 03:43:09
【问题描述】:
在 Linqtosql 中,如何在单个字段中显示多行中的项目。
例如,我有一个用于标记(实体、标记、实体标记)的 3 个表设置,所有这些都通过外键链接。
对于每个实体,我想在一个字段中返回名称,然后在第二个字段中返回所有相关标签。
例如项目1,标签1;标签2;标签3 项目2,标签4,标签5....
VB 语句优先。
谢谢 杰夫
【问题讨论】:
标签: vb.net linq-to-sql
在 Linqtosql 中,如何在单个字段中显示多行中的项目。
例如,我有一个用于标记(实体、标记、实体标记)的 3 个表设置,所有这些都通过外键链接。
对于每个实体,我想在一个字段中返回名称,然后在第二个字段中返回所有相关标签。
例如项目1,标签1;标签2;标签3 项目2,标签4,标签5....
VB 语句优先。
谢谢 杰夫
【问题讨论】:
标签: vb.net linq-to-sql
好的,不确定这是否是最有效的方法,但它有效。
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)
【讨论】:
有了这个答案,我假设您的表格设置类似于以下内容,名称不是很好,仅用于说明:
一个实体:ID、名称
Atag:ID、TagName
EntityTag:EntityId(FK 到 AnEntity.Id)、TagId(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。 'from ent in dc.AnEntities' 获取所有实体记录,然后下一个'from enttags in ent.EntityTags' 获取每个实体的所有实体标记记录。 group by 几乎可以做到这一点,按 AnEntity 对 EntityTag 记录进行分组。把它们放在匿名类型中,你就可以开始了。
已编辑:
好的,更改了上面的代码,它现在可以工作了。在获得 EntityTag 对象列表之前,现在您获得了 Entiy 对象和该实体的字符串(标签)列表。
【讨论】: