Как в 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, 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 в ent.EntityTags» получает все записи тегов сущностей для каждой сущности. Группа by делает это в значительной степени, группирует записи EntityTag по AnEntity. Поместите их в анонимный тип, и все готово.
ИЗМЕНИТЬ:
Хорошо, изменил код выше, теперь он работает. Прежде чем вы получите список объектов EntityTag, теперь вы получаете объект Entiy и список строк (тегов) для этой сущности.
Для того, что вы пытаетесь сделать, это лучший способ, который я могу придумать.