6
votes

Linq, expressions, NHibernate et comparaison similaire

J'essaie de faire une comparaison similaire basée sur un paramètre extérieur (transmis par un formulaire de recherche) qui détermine le type de comparaison ( "% string" ou "string%" ou "% string%" )

Je pensais dans la direction suivante: xxx

comme méthode similaire que sur la base de type sélectionné retourner .startswith () ou .WSwith () ou .Substring ()

Ma connaissance des expressions est apparemment loin de Génial, car je n'ai pas pu construire une méthode qui pourrait générer le résultat droit (comparaison du côté serveur en SQL comme avec StartSwith méthode).


0 commentaires

4 Réponses :



1
votes

On dirait que vous devriez vouloir utiliser:

query = query.Where(
Entity.StringProperty.StartsWith("SearchString")
)


0 commentaires

0
votes

C'est exactement ce que j'avais à l'esprit, merci. J'avais déjà quelque chose de similaire déjà écrit, mais cela n'a pas traduit par SQL. Par exemple, cela a fonctionné si je l'ai fait directement:

CompMethod("BaseString","SearchString",SelectedComparsionType.EndsWith)


0 commentaires

17
votes

le moyen facile strong>

il suffit d'utiliser p> xxx pré>

la voie difficile forte> p>

Si vous voulez faire quelque chose comme cela, assurez-vous que votre fournisseur de Linq peut être informé de cette nouvelle méthode et comment elle se traduit par SQL (improbable) ou empêche votre méthode d'atteindre le fournisseur LINQ et fournissez quelque chose à ce que Cela comprend (dur). Par exemple, au lieu de p> xxx pré>

, vous pouvez créer quelque chose comme p> xxx pré>

avec le code suivant p>

var query = from e in source.WhereLike(
                e => e.StringProperty, "SearchString", comparsionType)
            where e.OtherProperty == 123
            orderby e.StringProperty
            select e;


1 commentaires

Ruben: phénoménal, c'est un enfer d'une explication - complète, compréhensible, approfondie et exactement ce que je cherchais, merci. Je voudrais également remercier les autres pour leur aide.