【问题标题】:Linqtosql - joined rowsLinq To Sql - 连接行
【发布时间】:2008-11-25 03:43:09
【问题描述】:

在 Linqtosql 中,如何在单个字段中显示多行中的项目。

例如,我有一个用于标记(实体、标记、实体标记)的 3 个表设置,所有这些都通过外键链接。

对于每个实体,我想在一个字段中返回名称,然后在第二个字段中返回所有相关标签。

例如项目1,标签1;标签2;标签3 项目2,标签4,标签5....

VB 语句优先。

谢谢 杰夫

【问题讨论】:

    标签: vb.net linq-to-sql


    【解决方案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)
    

    【讨论】:

    • 对于你想要做的事情,这是我能想到的最好的方式。
    【解决方案2】:

    有了这个答案,我假设您的表格设置类似于以下内容,名称不是很好,仅用于说明:

    一个实体: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 对象和该实体的字符串(标签)列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 2023-03-24
      • 2014-04-08
      • 2014-08-25
      • 2011-10-14
      • 1970-01-01
      相关资源
      最近更新 更多