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));