LINQ to Entity, utilisant un opérateur SQL LIKE
J'ai une LINQ to ENTITÉ de requête qui extrait d'une table, mais j'ai besoin d'être en mesure de créer un "flou" type de recherche. J'ai donc besoin d'ajouter une clause where qui recherche par nom SI on ajoute à cela les critères dans la zone de recherche (zone de texte, PEUT être vierge --- dans ce cas, il tire TOUT).
Voici ce que j'ai à ce jour:
var query = from mem in context.Member
orderby mem.LastName, mem.FirstName
select new
{
FirstName = mem.FirstName,
LastName = mem.LastName,
};
Qui va tirer tout ce qui sort de la table Membre qui est l'objet d'Entité.
Puis j'ai un plus à la logique:
sLastName = formCollection["FuzzyLastName"].ToString();
if (!String.IsNullOrEmpty(sLastName))
query = query.Where(ln => ln.LastName.Contains(sLastName));
Le problème, c'est quand le bouton de recherche est pressé, rien n'est renvoyé (0 résultats). J'ai exécuter la requête sur le Serveur SQL que j'attends d'arriver ici et elle renvoie 6 résultats.
C'est la requête que j'attends:
SELECT mem.LastName, mem.FirstName FROM Members mem WHERE mem.LastName LIKE '%xxx%'
(quand xxx est entré dans la zone de texte)
Quelqu'un voit quelque chose de mal avec cela?
EDIT: correction de la requête SELECT. Je voulais dire pour la lecture des LIKE '%xxx%' (PAS = 'xxx")
source d'informationauteur SlackerCoder
Vous devez vous connecter pour publier un commentaire.
Je pense que vous voulez utiliser la
Contains()
fonction du paramètre de chaîne comme ceci:Je pense que vous pouvez également utiliser
StartsWith()
etEndsWith()
qui serait l'équivalent du SQL 'xxx%" et "%xxx", respectivement.Ajouter votre "nouvelle" à la requête seulement après l'ajout de votre clause "where".
Donc ajouter votre clause select à l'aide de l'objet de la syntaxe d'appel comme vous l'avez fait avec la clause where.
Pas testé, s'il vous plaît excuser de petites erreurs, mais le concept général serait....
Qui signifie que vous souhaitez que le nom de famille pour être égal à 'xxx'. Ce que vous écrivez dans votre post ci-dessus est que le nom doit contenir 'xxx'.
Pour l'obtenir à l'égalité, vous devez écrire:
Peut-être vous devriez chercher à ignorer la casse: