Так как вы объединяете сущности из разных контекстов, вам не может обойтись менее 2 выбор.
Ваше объединение - это простая проверка личности, поэтому вы можете сделать это:
var ids = db.News.Select(x => x.ID).ToList();
Теперь у вас есть локальная копия всех идентификаторов в таблице новостей - первый выбор. Затем измените ваше первое «что-то» на:
something = db.TaggedContents
.Where(x => ids.Contains(x.ContentID))
.Select(x => new { x.TagID });
Этот второй оператор сам по себе не генерирует выбор из-за отложенного выполнения. Теперь вы можете удалить ToList()
в третьем выражении:
something = something.Join(db.Tags,
tid => tid.TagID,
t => t.ID,
(tid, t) => t);
И когда вы, наконец, перечислите число something
, у вас будет второй выбор.