412 Stimmen

Wie macht man SQL Like % in Linq?

Ich habe eine Prozedur in SQL, die ich versuche, in Linq umzuwandeln:

SELECT O.Id, O.Name as Organization
FROM Organizations O
JOIN OrganizationsHierarchy OH ON O.Id=OH.OrganizationsId
where OH.Hierarchy like '%/12/%'

Die Zeile, die mir am meisten am Herzen liegt, ist:

where OH.Hierarchy like '%/12/%'

Ich habe eine Spalte, in der die Hierarchie gespeichert ist, wie z. B. /1/3/12/, so dass ich einfach %/12/% verwenden kann, um danach zu suchen.

Meine Frage ist, was ist die Linq oder .NET-Äquivalent zur Verwendung des Prozentzeichens?

589voto

andleer Punkte 21968
.Where(oh => oh.Hierarchy.Contains("/12/"))

Sie können auch Folgendes verwenden .StartsWith() o .EndsWith() .

262voto

L P Punkte 2619

Verwenden Sie dies:

from c in dc.Organization
where SqlMethods.Like(c.Hierarchy, "%/12/%")
select *;

43voto

KristoferA Punkte 12049

Ich nehme an, Sie verwenden Linq-to-SQL* (siehe Hinweis unten). Wenn ja, verwenden Sie string.Contains, string.StartsWith und string.EndsWith, um SQL zu erzeugen, das den SQL LIKE-Operator verwendet.

from o in dc.Organization
join oh in dc.OrganizationsHierarchy on o.Id equals oh.OrganizationsId
where oh.Hierarchy.Contains(@"/12/")
select new { o.Id, o.Name }

o

from o in dc.Organization
where o.OrganizationsHierarchy.Hierarchy.Contains(@"/12/")
select new { o.Id, o.Name }

Note : * Wenn Sie das ADO.Net Entity Framework (EF / L2E) in .net 3.5 verwenden, beachten Sie bitte, dass es nicht die gleiche Übersetzung wie Linq-to-SQL vornimmt. Obwohl L2S eine korrekte Übersetzung vornimmt, übersetzt L2E v1 (3.5) in einen t-sql-Ausdruck, der einen vollständigen Tabellenscan der abgefragten Tabelle erzwingt, es sei denn, es gibt ein anderes besseres Unterscheidungsmerkmal in der Where-Klausel oder den Join-Filtern.
Aktualisierung: Dies wurde in EF/L2E v4 (.net 4.0) behoben, so dass es ein SQL LIKE generiert, genau wie L2S es tut.

29voto

robertz Punkte 758

Wenn Sie VB.NET verwenden, dann wäre die Antwort "*". So würde Ihre Where-Klausel aussehen...

Where OH.Hierarchy Like '*/12/*'

Hinweis: "*" steht für null oder mehr Zeichen. Hier ist der msdn-Artikel für den Like-Operator .

8voto

Rumplin Punkte 2599

Nun, indexOf funktioniert auch für mich

var result = from c in SampleList
where c.LongName.IndexOf(SearchQuery) >= 0
select c;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X