Frage an .net, c#, linq, dynamic – System.Linq.Dynamic - Kann ich eine IN-Klausel in einer WHERE-Anweisung verwenden?

12

Ich habe dynamische Linq WHERE-Anweisung:

<code>dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ...");
</code>

Ich möchte wechseln zu:

<code>dataContext.Table.Where("id IN (0, 1, 2, ...)");
</code>

Aber es geht nicht. Wie kann ich das für eine bessere Leistung tun?

Deine Antwort

3   die antwort
10

VonWie verwende ich "enthält" oder "wie" in einer dynamischen Linq-Abfrage?

<code>//edit: this is probably broken, see below
ids = new int[] {1,2,3,4};
dataContext.Table.Where("id.Contains(@0)", ids);
</code>

Nebenbei: Es wird empfohlen, Platzhalter in dynamischen Linq-Ausdrücken zu verwenden. Andernfalls können Sie sich für Linq-Injection-Angriffe öffnen (Ist Injection über Dynamic LINQ möglich?)

BEARBEITEN:

Eigentlich glaube ich, dass ich das durcheinander gebracht habe. Leider kann ich das im Moment nicht testen. Aber ich denke, die richtige Syntax sollte in diesem Fall seindataContext.Table.Where("@0.Contains(id)",ids);, nicht umgekehrt, und diese Version tutnicht arbeiten out-of-the-box.

SehenHier Hier finden Sie eine Möglichkeit, diese Funktionalität zur dynamischen Verknüpfung hinzuzufügen. Sie müssen die Bibliothek dafür ändern.

5
<code>var ids = new int[] {1,2,3,4};
dataContext.Table.Where(f => ids.Contains(f.id))
</code>
Danke, das weiß ich, aber der Spaltenname "id" ändert sich. Ich bekomme diese Spalte dinamycally. Daher kann ich kein statisches Linq verwenden. Ich muss dynamische linq Bibliothek für Zeichenkette verwenden, in der clausule als Beispiel.Dynamic Linq Pavel Jedlicka
@Ingenu, lies die Ressource und du wirst herausfinden, worum es bei Dynamic Linq geht Adrian Iftode
4

lgende Syntax verwendendataContext.Table.Where("@0.Contains(outerIt.id)",ids); wie es gemacht und im bereits zitierten Blog vorgestellt wurde:Hier

Verwandte Fragen