Groß- / Kleinschreibung ohne Bedeutung, Vergleich mit linq-to-sql und linq-to-objects

8

Siehe auch Unterschiede zwischen LINQ to Objects und LINQ zu SQL-Abfragen

Wir verwenden einige Abfragen über unsere Datenbank und unsere in Speicherobjekten .

Was ist der beste Weg, um eine insensitive Zeichenkette mit linq-to-sql zu vergleichen, so dass?

  • Es läuft schnell auf SQL Server
  • Derselbe Abfrageausdruck kann mit linq-to-objects verwendet werden, um das gleiche Ergebnis zu erhalten

Verwenden Sie

%Vor%

bringt zumindest die gleichen Ergebnisse, aber es wird, soweit ich das beurteilen kann, nicht auf dem SQL-Server verarbeitet, daher kann es viel langsamer sein als

%Vor%     
Ian Ringrose 05.03.2010, 15:55
quelle

3 Antworten

0

Ich bin kein Experte in linq to sql, aber Sie könnten einfach die ToUpperInvariant () -Methode von string vor dem Vergleich verwenden.

    
Enyra 05.03.2010, 16:04
quelle
6

Die Groß- / Kleinschreibung in Ihrer SQL-Datenbank wird durch die Sortierungseinstellung bestimmt. Standardmäßig denke ich, dass die meisten Datenbanken nicht zwischen Groß- und Kleinschreibung unterscheiden. Daher sollten Sie überprüfen, ob Sie die Groß- und Kleinschreibung explizit berücksichtigen müssen.

In einer Sortierungseinstellung von SQL_Latin1_General_CP1_CI_AS - CI steht für Groß- / Kleinschreibung und AS steht für akzentsensitiv.

Leider ignoriert Linq-to-Sql die zusätzlichen Parameter von String.Compare() , so dass Sie die Groß- / Kleinschreibung für den Vergleich nicht explizit festlegen können. Es wird jedoch mit LINQ zu Objekten funktionieren.

Wenn Sie eine Sortierung verwenden, bei der die Groß- und Kleinschreibung berücksichtigt wird, können Sie mit SqlMethods.Like(field, "string") eine LIKE-Abfrage verwenden, bei der die Groß- / Kleinschreibung nicht berücksichtigt wird. Dies wird jedoch nicht in Objekte umgewandelt.

    
andreialecu 05.03.2010 16:21
quelle
1

Hier sind die Liste der unterstützten Zeichenfolgenoperationen in LINQ to SQL, die offensichtlich in LINQ zu Objekten funktionieren würden: Ссылка

Ich persönlich habe nicht jede für die Leistung bewertet, aber ToLower und ToUpper werden in LINQ to SQL nicht unterstützt, daher scheint Compare ein guter Kandidat zu sein. Sie können das übersetzte SQL mithilfe eines Tools wie LINQPad untersuchen, das über eine kostenlose Version verfügt und eine Abfrage in SQL-Datenbank übersetzt, um zu sehen, wie es mit der Datenbank ausgeführt wird.

LINQ to Objects ist wahrscheinlich auch anders, also ist das, was gut für eins ist, vielleicht nicht gut für das andere ...

    
Brian Mains 05.03.2010 16:08
quelle