Linq как выбрать родителя с дочерней коллекцией, которая содержит один или многие из массива (или списка) значений

Кажется, что это будет достаточно легко

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

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

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

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

Ответ 1

как насчет...

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 не будет подстрокой любого из слов списка.. например, "я" )

Ответ 2

Использование 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));