2 Stimmen

Mit LINQ wie kann ich für eine Instanz einer Zahl in einem Array, in einem anderen Array überprüfen?

Ich habe eine Liste von MyItem Objekte namens myItems wie diese:

public class MyItem{
    public int[] category_ids;
    public string name;
}

List<MyItem> myItems;

Ich möchte die Liste der Objekte mit einer Liste ausgewählter Kategorien so filtern, dass die gefilterte Liste JEDE der Filterkategorie-IDs enthält:

int[] filter = { 1, 5, 6, 9 };

Wie würde ich das mit LINQ in einer Zeile tun? (wenn es überhaupt möglich ist, kann ich nicht meinen Kopf um es zu wickeln!) Ich stelle mir etwas vor, das in etwa so aussieht:

IEnumerable<MyItem> filtered = myItems.Where(item => item.category_ids.Contains(xxx));

2voto

Euphoric Punkte 12272

Ein weiterer Methodenaufruf ist erforderlich:

IEnumerable<MyItem> filtered = myItems.Where(item => item.category_ids.Any(x=>filter.Contains(x));

2voto

Wiktor Zychla Punkte 45367

Eine andere Option als die bereits vorgestellte:

var filtered = myItems.Where( item => item.category_ids.Intersect( filter ).Count() > 0 );

2voto

cuongle Punkte 71553
var filtered = myItems.Where(x => x.category_ids.Intersect(filter)
                                          .Any());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X