我对这Linq
句话有些困惑。我的基本数据库结构是:
* Event (ID, Name, VenueID)
* Venue (ID, Name)
* EventTag (EventID, TagID)
* VenueTag (VenueID, TagID)
* Tag (TagID, Name)
我得到一个事件列表,每个事件都有一个EventTags列表(具有标签列表),每个事件都有一个场所,该场所具有一个场所标签列表,该场所具有一个标签列表。
我想要得到的是在所有事件之间使用的标记的不同列表。
我已经尝试了一些方法,但是我要么获得了EventTags
和的列表,VenueTags
要么可能不包含标签,要么什么都没有。
我的一些尝试((我可能已经走了,所以不要笑!):
var tags = events.Select(x=>x.EventTag.Select(x=>x.Tag)).Union(events.Select(y=>y.Venue.VenueTag.Select(z=>z.Tag))).Distrinct().ToList()
要么
var tags1 = (from y in (from x in events where events.EventTags.Count > 0 select x) select y.Tag).ToList
那时我希望能和Venue做同样的事情,把它们放在一起,但是没有运气...
提前致谢!
您第一次很接近-只是需要SelectMany
而不是Select
获取每个实体的所有标签:
events.SelectMany(x => x.EventTag).Select(et => et.Tag)
.Union(events.SelectMany(x => x.Venue.VenueTag).Select(vt => vt.Tag))
.Distrinct().ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句