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:
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.