У меня есть список объектов пользователя (List<User>
). Каждый объект в этом списке имеет список событий (List<Event>
). Мне нужно создать новую коллекцию событий с общими объектами во всех списках событий у каждого пользователя. Я имею в виду, что у каждого пользователя в базовой коллекции есть каждое событие в новой коллекции событий.
Я думаю, что это можно сделать с помощью цикла foreach, но я надеюсь, что есть более элегантный способ сделать это с помощью LINQ.
Надеюсь, вы поможете. Спасибо.
.ToList()
, объявитьseed
какIEnumerable<T>
- оба варианта работают, но второй вариант более эффективен. см. мой обновленный ответ. 31.03.2013Aggregate
) так:var commonItems = userList.Select(u => u.Events).Aggregate((e, d) => e.Intersect(d));
. Но на самом деле может быть даже более интуитивно (и короче) заменить последнюю лямбду группой прямых методов, используя методIntersect
как обычный статический метод (не принимая во внимание его природу метода расширения), например так:var commonItems = userList.Select(u => u.Events).Aggregate(Enumerable.Intersect);
31.03.2013