2010-03-29 10 views
8

Mam obiekt (produkt), z właściwością typu "array"
np. product.tags = {"tag1", "tag2", "tag9"}LINQ - właściwość array zawiera element z innej tablicy

Mam tablicę znaczników wejściowych do filtrowania.

... ale to nie jest całkiem pracy:

List<string> filterTags = new List<string>() { "tag1", "tag3" }; 

var matches = from p in products 
    where p.Tags.Contains(filterTags) 
    select p; 

Wszelkie zalecenia? Dzięki.

Odpowiedz

19

Co naprawdę zamierza się osiągnąć przy pomocy Contains? Czy wszystkie elementy w Tags muszą istnieć w filterTags? A przynajmniej jeden z nich? Dla tych ostatnich użyj Any, a dla pierwszego użyj All. Twój where linia zmieni się:

where p.Tags.Any(tag => filterTags.Contains(tag)) 

lub

where p.Tags.All(tag => filterTags.Contains(tag)) 
+0

... Dzięki wielkie. Oznaczało to "każdy" w rzeczywistości. .... "... pokaż wszystkie produkty, które zawierają jeden lub więcej tagów wejściowych". Dam ci to. DZIĘKUJĘ CI! – Rob

+0

Jako LINQ dla wszystkich zainteresowanych: 'context.Products.Where (p => p.Tags.Any (tag => filterTags.Contains (tag)))' –

Powiązane problemy