2010-03-05 9 views
8

siehe auch Differences between LINQ to Objects and LINQ to SQL queriesGroß- und Kleinschreibung Zeichenfolge vergleichen mit Linq to SQL und LINQ-to-Objekte

Wir nutzen die einige Abfragen über unsere Datenbank und unsere in Speicherobjekte.

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

  • Es läuft schnell auf SQL Server
  • Die gleiche Abfrage Ausdruck kann mit verwendet werden Linq-to-Objekte das gleiche Ergebnis

Mit

a.ToLowerInvariant() == b.ToLowerInvariant() 

zumindest zu erhalten bekommt die gleichen Ergebnisse, aber es wird nicht auf SQL-Server verarbeitet, soweit ich das beurteilen kann, so kann viel langsamer als

01 werden
+0

Eine gespeicherte Prozedur schreiben! – RBarryYoung

+2

@Rbarry Wie hilft eine gespeicherte Prozedur beim Ausführen einer Abfrage über unsere im Speicher Objekte? –

+0

Ah. Guter Punkt (duh). Macht nichts ... – RBarryYoung

Antwort

0

Ich bin kein Experte in LINQ zu SQL, aber Sie könnten einfach die ToUpperInvariant() -Methode von Zeichenfolge vor dem Vergleich verwenden.

+0

Danke, das Problem ist, es wird nicht Prozess auf SQL-Server so weit wie ein wissen, so dass eine Menge Zeilen über die nächste Arbeit gezogen werden. Während Sie die Antwort geschrieben haben, habe ich versucht, ToLowerInveriant(), dass zumindest meine Unit Tests zu bestehen. –

1

Hier sind die Liste der unterstützten String-Operationen in LINQ to SQL, die offensichtlich in LINQ zu Objekten funktionieren würde: http://msdn.microsoft.com/en-us/library/bb882672.aspx

Ich habe persönlich nicht jeder für die Leistung bewertet, aber ToLower und ToUpper werden nicht unterstützt, in LINQ to SQL, so scheint es, als wäre Compare ein guter Kandidat. 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 in der Datenbank ausgeführt wird.

Auch LINQ to Objects wahrscheinlich unterscheidet sich so was gut ist für eine nicht für den anderen gut sein kann ...

+0

wir müssen den "Filter" für gespeicherte Daten und Live-Daten ausführen, so dass die Verwendung einiger linq-Abfragen zu einem netten Code führt.Wenn es nur dasselbe wäre! –

6

Fall Empfindlichkeit in der SQL-Datenbank, die von der Sortiereinstellung bestimmt wird. Standardmäßig denke ich, dass die meisten Datenbanken nicht zwischen Groß- und Kleinschreibung unterscheiden. Daher sollten Sie prüfen, ob Sie die Groß- und Kleinschreibung explizit berücksichtigen müssen.

In einer Sortiereinstellung von SQL_Latin1_General_CP1_CI_AS - CI empfindlich für Akzent unempfindlich und AS steht für Fall steht.

Leider ignoriert Linq-to-Sql die zusätzlichen Parameter von String.Compare(), so dass Sie nicht in der Lage sein werden, die Groß-/Kleinschreibung für den Vergleich explizit festzulegen. Es wird jedoch mit LINQ zu Objekten arbeiten.

Wenn Sie eine Sortierung unter Berücksichtigung der Groß-/Kleinschreibung verwenden, können Sie beispielsweise SqlMethods.Like(field, "string") verwenden, um eine LIKE-Abfrage zu verwenden. Dabei wird nicht zwischen Groß- und Kleinschreibung unterschieden.

+2

+1: Dies ist das Herz des Problems. – RBarryYoung

Verwandte Themen