LINQ aromatisiert IS IN Abfrage

8

Es gibt eine ganze Reihe anderer Fragen, die ähnlich sind, aber keiner von ihnen scheint zu tun, was ich versuche zu tun. Ich möchte eine Liste von Zeichenfolgen und Abfragen übergeben

%Vor%

oder wie

%Vor%

Ich habe mit a.sysid.Contains () herumgespielt, konnte aber nirgendwohin kommen.

    
bumble_bee_tuna 16.04.2012, 18:21
quelle

3 Antworten

11

Contains ist der Weg nach vorne:

%Vor%

Obwohl Sie mit einer HashSet<string> anstelle einer Liste besser arbeiten würden, wenn es um die Leistung geht, wenn alle contains-Prüfungen vorliegen. (Das heißt, es wird einige Einträge geben ... für eine kleine Anzahl von Werten wird es keinen großen Unterschied machen, und ein List<string> könnte sogar schneller sein.)

Beachten Sie, dass der Leistungsaspekt davon ausgeht, dass Sie LINQ to Objects verwenden. Wenn Sie LINQ to SQL verwenden, spielt dies keine Rolle, da die Überprüfung von Contains nicht prozessintern durchgeführt wird trotzdem.

    
Jon Skeet 16.04.2012, 18:22
quelle
1

Sie würden nicht a.sysid.Contains aufrufen; Die Syntax für IN (SQL) ist die umgekehrte Syntax für Contains (LINQ)

%Vor%     
Adam Robinson 16.04.2012 18:23
quelle
1

Zusätzlich zum Contains Ansatz könnten Sie join :

verwenden %Vor%

Ich bin nicht sicher, ob dies mit einem HashSet besser als Contains ist, aber es wird zumindest eine ähnliche Leistung haben. Es wird sicherlich besser, als Contains mit einer Liste zu verwenden.

    
phoog 16.04.2012 18:28
quelle

Tags und Links