linq, как выбрать родителя с дочерней коллекцией, которая содержит один или несколько из массива (или списка) значений - PullRequest
14 голосов
/ 25 октября 2011

Кажется, что это было бы достаточно просто

var orx = gg.Where(x=>x.ProductAttributes.Any (pa =>pa.AttributeId == "home"));

возвращает gg, когда атрибуты продукта имеют значение "home"

Мне нужно, чтобы он возвращал, где gg имеет значения атрибута productиз массива т.е.

var orx = gg.Where(x=>x.ProductAttributes.Any (pa =>pa.AttributeId in "home,work"));

Ответы [ 2 ]

24 голосов
/ 25 октября 2011

а как же ...

string[] values = new string[] { "home", "work" };
var orx = gg.Where(x => x.ProductAttributes.Any(pa => values.Contains(pa.AttributeId));

или даже "home,work".Contains(pa.AttributeId) должны работать, если ваш список так же надежен, как и ваш пример. (Я ни в коем случае не рекомендую это, если вы не можете гарантировать, что AttributeId не будет подстрокой любого из слов списка ... таких как "я")

5 голосов
/ 25 октября 2011

Использование Enumerable.Contains () :

var orx = gg.Where(x => x.ProductAttributes
                        .Any(pa =>
                             array.Containspa(pa.AttributeId));

var orx = gg.Where(x => x.ProductAttributes
                        .Any(pa =>
                             "home, work".Split(',').Contains(pa.AttributeId));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...