Linq пересекает дочерний список целых чисел и список целых чисел - PullRequest
2 голосов
/ 04 января 2011

У меня есть список пользователей, каждый из которых содержит список связанных идентификаторов витрин. У меня есть отдельный список целых чисел, и я хочу найти, где любой идентификатор магазина пользователя совпадает с любым целым числом в отдельном списке.

Я ожидаю что-то вроде этого:

clientUsers = clientUsers.Where(x => x.Storefronts.Intersect(allowedStorefrontIds));

Мне сказали, что аргументы типа не могут быть выведены из использования в методе расширения Where.

Знаете ли вы, как я должен структурировать свой linq в этом случае?

Ответы [ 2 ]

5 голосов
/ 04 января 2011

Вам просто нужно .Any() в лямбде, чтобы проверить, содержит ли пересечение множеств какие-либо элементы:

x => x.Storefronts.Intersect(allowedStorefrontIds).Any()

Лично я бы сделал что-то подобное для эффективности:

var allowedIds = new HashSet<int>(allowedStorefrontIds);

var allowedUsers = clientUsers.Where(x => x.StoreFronts.Any(allowedIds.Contains));
0 голосов
/ 04 января 2011

Где ожидает функция, которая возвращает логическое выражение.Пересечь возвращает список.Я думаю, что clientUsers.Intersect(allowedStorefrontIds) должен вернуть ожидаемый вами список, если только в списке кода нет другого списка.

...