In SQL können Sie die folgende Syntax verwenden:
SELECT *
FROM MY_TABLE
WHERE VALUE_1 IN (1, 2, 3)
Gibt es ein Äquivalent in C #? Die IDE scheint "in" als Schlüsselwort zu erkennen, aber ich kann anscheinend keine Informationen dazu finden.
Ist es also möglich, Folgendes zu tun:
int myValue = 1;
if (myValue in (1, 2, 3))
// Do something
Anstatt
int myValue = 1;
if (myValue == 1 || myValue == 2 || myValue == 3)
// Do something
c#
sql
operators
in-operator
Paul Michaels
quelle
quelle
Antworten:
Wenn Sie .In schreiben möchten, können Sie eine Erweiterung erstellen, mit der Sie dies tun können.
quelle
List.Contains()
ist ich denke was du suchst. C # hatin
keyword
und nicht einenoperator
, der einem völlig anderen Zweck dient als das, worauf Sie sich in SQL beziehen.Es gibt zwei Möglichkeiten, wie Sie
in
Schlüsselwörter in C # verwenden können. Angenommen, Sie haben eine Zeichenfolge [] oder Liste in C #.In Bezug auf Ihre Bearbeitung würde ich Ihren Code so einfügen, dass Sie das tun, was Sie brauchen.
quelle
Du kannst das:
quelle
Normalerweise verwenden Sie die
Contains
Methode einer Sammlung.Ich hoffe, es hilft.
quelle
In C # gibt es keinen "in" -Operator. Das Schlüsselwort "in" wird nur mit "foreach (... in ...)" oder "from ... in ..." verwendet.
Das LINQ-Äquivalent Ihrer SQL-Abfrage wäre:
quelle
Duplikat von: LINQ to SQL in und nicht in
oder
Das Äquivalent von IN- und NOT IN-Abfragen in LINQ zu SQL wäre ungefähr so:
und das:
quelle
Ich bin damit einverstanden, dass der In-Operator am besten mit einer Erweiterungsmethode implementiert werden kann. Ich habe es etwas anders gemacht:
Der Unterschied besteht darin, dass Sie nicht jeden Wert in Anführungszeichen setzen müssen, sondern nur den gesamten Satz von durch Kommas getrennten Werten, was einfacher einzugeben ist:
quelle
public static bool In(this string str, params string[] stringSet)
und nenne es wiebool result = myString.In("Val1", "Val2", "Val3")
Sie können eine Erweiterung schreiben. Ich habe vor einmal geschrieben, um Code wie zu machen
besser lesbar mit einer Erweiterung, die man schreiben konnte
Hier ist der Code :
Dies ist diejenige, die für meine damaligen Bedürfnisse spezifisch ist, aber Sie können sie anpassen und modifizieren, um sie an verschiedene Typen anzupassen.
quelle
Für Ziffern von 0 bis 9:
Für alle anderen Sachen:
quelle
Für Ihre aktualisierte Frage können Sie auch eine switch-Anweisung verwenden.
quelle
Es gibt keinen in-Operator, der nach einem Wert in einer Sammlung sucht, sondern eine Methode der Sammlung, die aufgerufen wird
Contains
.Die skalierbarste Lösung ist die Verwendung von a
HashSet
als Sammlung. Das Überprüfen auf einen Wert in aHashSet
liegt nahe an einer O (1) -Operation im Vergleich zuList
einer O (n) -Operation. Das bedeutet, dass Sie viele Werte in a packen könnenHashSet
und es immer noch schnell ist, während die Suche nach einem Wert in aList
langsamer wird, je mehr Werte Sie haben.Beispiel:
quelle
Allgemein, LINQ viel leistungsfähiger:
quelle
Das
in
Schlüsselwort in C # steht für dieforeach
Anweisung und für LINQ-Abfrageausdrücke. Es gibt keine Funktionalität, die dem SQL-in
Operator in C # per se entspricht, aber LINQ bietet ähnliche Funktionen mitContains()
.quelle
Ich mache so etwas:
quelle