Ich habe eine Liste von orders
.
Ich möchte orders
basierend auf einer Reihe von Auftragsstatus auswählen .
Also im Wesentlichen select orders where order.StatusCode in ("A", "B", "C")
// Filter the orders based on the order status
var filteredOrders = from order in orders.Order
where order.StatusCode.????????("A", "B", "C")
select order;
Antworten:
Ihre Statuscodes sind ebenfalls eine Sammlung. Verwenden Sie daher
Contains
:oder in Abfragesyntax:
quelle
quelle
NB: Dies ist LINQ für Objekte. Ich bin nicht 100% sicher, ob es in LINQ für Entitäten funktioniert, und habe momentan keine Zeit, dies zu überprüfen. Tatsächlich ist es nicht allzu schwierig, es in [A, B, C] in x zu übersetzen , aber Sie müssen es selbst überprüfen.
Also, statt enthält als Ersatz für die ???? In Ihrem Code können Sie Any verwenden, das mehr LINQ-uish ist:
Es ist das Gegenteil von dem, was Sie aus SQL kennen. Deshalb ist es nicht so offensichtlich.
Wenn Sie hier eine fließende Syntax bevorzugen, ist dies natürlich:
Hier sehen wir wieder eine der LINQ-Überraschungen (wie die Joda-Rede, bei der Select am Ende steht). In diesem Sinne ist es jedoch ziemlich logisch, zu prüfen, ob mindestens eines der Elemente (dh eines ) in einer Liste (Satz, Sammlung) mit einem einzelnen Wert übereinstimmt.
quelle
Versuchen Sie es mit
Contains
Funktion;quelle
Seien Sie vorsichtig,
.Contains()
passt zu allen Teilzeichenfolgen, einschließlich der Zeichenfolge, die Sie nicht erwarten. Zum Beispiel.new[] { "A", "B", "AA" }.Contains("A")
Sie erhalten sowohl A als auch AA zurück, die Sie möglicherweise nicht möchten. Ich bin davon gebissen worden..Any()
oder.Exists()
ist sicherer Wahlquelle