Ситуация такова: на веб-странице отображается список собраний зарегистрированного пользователя. Среди этой группы запросов могут быть собрания, на которые пользователь подписан, но еще не просматривал до загрузки этой страницы. Теперь, когда собрания были просмотрены этим пользователем, я хочу отметить их как таковые.
Я могу заставить это работать, используя ToList () и Contains () (см. Ниже), но это означает, что мне нужно совершить 2 поездки в базу данных: 1 для ToList () и 1 для foreach (). Я пробовал другие способы получить эти подписки, но вместо этого они стали EntitySet.
Users Gatherings
===== ==========
UserId GatheringId
GatheringSubscriptions
======================
GatheringSubscriptionId
GatheringId
UserId
IsViewed
// update unviewed=>viewed for this user's subscription to each
// of these gatherings
public void MarkViewed(IQueryable<Gathering> gatherings, int userId) {
List<int> gIdsList = gatherings.Select(g => g.GatheringId).ToList();
IQueryable<GatheringSubscription> gSubs = db.GatheringSubscriptions
.Where(gs =>
gs.UserId == userId &&
!gs.IsViewed &&
gIdsList.Contains(gs.GatheringId))
.Distinct();
foreach (GatheringSubscription gSub in gSubs)
gSub.IsViewed = true;
db.SubmitChanges();
}
Как я могу добиться того же, но только за 1 поездку в базу данных?