Thomas Bandt

Über mich | Kontakt | Archiv

LINQ to SQL - ExecuteQuery() und LIKE

Wer - aus welchem Grund auch immer - eine LINQ-to-SQL-Abfrage selbst zusammenbastelt, diese mit Like-Parametern bestückt und sie abfeuert, wird schnell merken, dass da gar kein "richtiges" Like bei rauskommt. So gibt es letztendlich nur Treffer, bei denen der komplette Suchstring auch dem Feld-Wert entspricht, nicht einem Teil davon.

Ein Blick in den SQL Profiler bringt schnell die Ursache ans Licht: LINQ to SQL baut intern alles in SQL-Parameter um, was an sich sehr vorbildlich ist und vor allem vor SQL Injection schützt. Aber es verhindert eben bei Bedinungen wie

   1:  sql.Append(" OR LastName Like {0}");

auch die "richtige" angenommene Ausführung. Der Grund ist das SQL-Ergebnis:

   1:  LastName Like @p0

Ein Blick in das eigene Gedächtnis Blog zeigt die Lösung, die keine andere ist als vor drei Jahren schon:

   1:  sql.Append(" OR LastName Like '%' + {0} + '%'");

Nett. Nun funktioniert das wenigstens, wo ich mich schon ärgern muss überhaupt untypisierten Code zu schreiben.

Kommentare

  1. Flo schrieb am Freitag, 28. November 2008 13:02:00 Uhr:

    sql = sql.where(p => p.LastName.Contains("labernich"))
    müsste doch klappen?
  2. Thomas schrieb am Freitag, 28. November 2008 13:06:00 Uhr:

    Sorry, vergessen zu schreiben: sql ist ein StringBuilder, da es um die Abfrage wie ExecuteQuery() geht/ging.


« Zurück  |  Weiter »