Linq - 通过标签缩小事件的列表对象

时间:2014-01-20 13:52:33

标签: c# linq list

我对这个Linq声明感到有点难过。我的基本数据库结构是:

  • 事件(ID,名称,VenueID)
  • 地点(身份证,姓名)
  • EventTag(EventID,TagID)
  • VenueTag(VenueID,TagID)
  • 标签(TagID,名称)

我有一个事件列表,我希望通过包含指定标记的事件或它们所包含的地点包含标记来缩小事件范围。

我试过这个,我想我可能不会太离谱,但我仍然在努力让它发挥作用:

eventsList = eventsList
                .SelectMany(x => x.EventTag)
                .Where(et => et.TagID == tagID)
                .Select(et => t.Event)
                .Union(eventsList.SelectMany(x=>x.Venue.VenueTag)
                .Where(vt =>vt.TagID == tagID)
                .Select(vt=>vt.Venue.Event)
                .Distinct()
                .ToList();

我非常感谢你的帮助!

安迪

1 个答案:

答案 0 :(得分:3)

您可以使用Any

eventsList.Where(
              x => x.EventTag.Any(et => et.TagID == tagID)
                   || x.Venue.Any(v => v.Any(vt => vt.TagID == tagID)))
          .ToList();