J'ai une procédure en SQL que j'essaye de transformer en Linq:
SELECT O.Id, O.Name as Organization
FROM Organizations O
JOIN OrganizationsHierarchy OH ON O.Id=OH.OrganizationsId
where OH.Hierarchy like '%/12/%'
La ligne qui me préoccupe le plus est:
where OH.Hierarchy like '%/12/%'
J'ai une colonne qui stocke la hiérarchie comme / 1/3/12 / par exemple, donc j'utilise simplement% / 12 /% pour la rechercher.
Ma question est, quel est l'équivalent Linq ou .NET à utiliser le signe pourcentage?
5
votes pour le tag d' opérateur similaire . Puis-je vous demander de suggérer comme sql-like comme synonyme ?Réponses:
Vous pouvez également utiliser
.StartsWith()
ou.EndsWith()
.la source
StartsWith("abc")
se convertitLIKE 'abc%'
etEndsWith("abc")
est converti enLIKE '%abc'
.ToLower().Contains()
etc. si vous voulez ignorer la casse. Si vous le souhaitez, cela dépendra bien sûr si vous essayez d'imiter LIKE à partir d'une base de données avec un classement insensible à la casse ou non.Utilisez ceci:
la source
SqlMethods
utilisant la «notation par points»?System.Data.Linq.SqlClient
espace de noms.Je suppose que vous utilisez Linq-to-SQL * (voir la note ci-dessous). Si tel est le cas, utilisez string.Contains, string.StartsWith et string.EndsWith pour générer du SQL qui utilise l'opérateur SQL LIKE.
ou
Remarque: * = si vous utilisez ADO.Net Entity Framework (EF / L2E) dans .net 3.5, sachez qu'il ne fera pas la même traduction que Linq-to-SQL. Bien que L2S effectue une traduction appropriée, L2E v1 (3.5) se traduira par une expression t-sql qui forcera une analyse complète de la table sur la table que vous interrogez, sauf s'il existe un autre meilleur discriminateur dans votre clause where ou vos filtres de jointure.
Mise à jour: Ceci est corrigé dans EF / L2E v4 (.net 4.0), donc il générera un SQL LIKE tout comme L2S.
la source
@
signe mais je me rends compte que cela peut être une bonne convention à suivre.Si vous utilisez VB.NET, la réponse serait "*". Voici à quoi ressemblerait votre clause where ...
Remarque: "*" Correspond à zéro ou plusieurs caractères. Voici l'article msdn pour l'opérateur Like .
la source
Eh bien, l'index fonctionne aussi pour moi
la source
Utilisez un tel code
la source
Le noyau .NET a maintenant
EF.Functions.Like
la source
Dans le cas où vous ne correspondez pas à des chaînes numériques, il est toujours bon d'avoir une casse commune:
la source
Je fais toujours ça:
Je sais que je n'utilise pas la même déclaration, mais cela fonctionne très bien en arrière-plan est-ce traduit en une requête avec une déclaration similaire.
la source
Essayez ceci, cela fonctionne bien pour moi
la source
la source
Contient est utilisé dans Linq, tout comme Like est utilisé dans SQL.
. . .
Vous pouvez écrire votre script SQL dans Linq comme suit:
la source
Pour ceux qui dégringolent ici comme moi à la recherche d'un moyen pour une méthode "SQL Like" dans LINQ, j'ai quelque chose qui fonctionne très bien.
Je suis dans un cas où je ne peux en aucun cas modifier la base de données pour modifier le classement des colonnes. Je dois donc trouver un moyen dans mon LINQ de le faire.
J'utilise la méthode d'assistance
SqlFunctions.PatIndex
qui agit de la même manière que le véritable opérateur SQL LIKE.J'ai d'abord besoin d'énumérer tous les signes diacritiques possibles (un mot que je viens d'apprendre) dans la valeur de recherche pour obtenir quelque chose comme:
puis dans LINQ par exemple:
Donc, pour mes besoins, j'ai écrit une méthode Helper / Extension
Si vous avez des suggestions pour améliorer cette méthode, je serai ravi de vous entendre.
la source
Bien en retard, mais j'ai jeté cela ensemble pour pouvoir faire des comparaisons de chaînes en utilisant des caractères génériques de style SQL:
la source