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

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

Как вы фильтруете, когда коллекция должна содержать все значения в массиве

var andAttributes = "super-quiet,electric-start".Split(',');

var andx = gg.Where(x => x.ProductAttributes.All(pa => andAttributes.Contains(pa.AttributeId)));

все вышеперечисленное выглядит так, как будто это будет работать, но, кажется, не работает.

Для данного примера productAttributes - это общий список, который может содержать 1 или более конкретных значений.

В английском я хочу выбрать только объекты, которые содержат как супер-тихие, так и электрические значения в коллекции productAttributes.

Это выражение действует как оператор OR

var orx = gg.Where(x => x.ProductAttributes.Any(pa => orAttributes.Contains(pa.AttributeId)));

1 Ответ

3 голосов
/ 26 октября 2011

В английском я хочу выбрать только объекты, которые содержат как супер-тихие, так и значения электрического запуска в коллекции productAttributes.

Ваш существующий запрос фильтрует объекты длякого все его атрибуты продукта содержатся в тестовой коллекции.Но, похоже, вы хотите обратного, то есть отфильтровать объекты, для которых все атрибуты в тестовой коллекции содержатся в атрибутах продукта .

var filteredGGs = from obj in gg                  
                  let objAttribIds = obj.ProductAttributes
                                        .Select(pa => pa.AttributeId)

                  where !andAttributes.Except(objAttribIds).Any()

                  select obj;

В другом примечании, пожалуйста,попытайтесь назвать свои переменные лучше, чтобы люди могли лучше понять ваши намерения.

...