Linqtosql - соединенные строки - PullRequest
1 голос
/ 24 ноября 2008

Как в Linqtosql показывать элементы из нескольких строк в одном поле.

например, у меня есть 3 таблицы для установки тегов (entity, tag, entitytag), все связанные через внешние ключи.

Для каждой сущности я хотел бы вернуть имя в одном поле, а затем все соответствующие теги во 2-м поле.

например, Item1, tag1; tag2; tag3 Item2, tag4, tag5 ....

VB операторы предпочтительнее.

Спасибо Geoff

Ответы [ 2 ]

1 голос
/ 24 ноября 2008

Хорошо, не уверен, что это самый эффективный способ, но он работает.

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 голосов
/ 24 ноября 2008

С этим ответом я предполагаю, что у вас настроены таблицы, подобные приведенным ниже, имена не очень хороши, просто для иллюстрации:

AnEntity: Id, Name
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' получает все записи тегов сущностей для каждой сущности. Группировка по делает это, группирует записи EntityTag по AnEntity. Поместите их в анонимный тип, и все готово.

РЕДАКТИРОВАНИЕ:
Хорошо, изменил код выше, теперь работает. Прежде чем вы получили список объектов EntityTag, теперь вы получаете объект Entiy и список строк (тегов) для этого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...