Comme opérateur dans LINQ to Objects
Je suis en train d'imiter le LIKE
opérateur dans LINQ to Objects. Voici mon code:
List<string> list = new List<string>();
list.Add("line one");
list.Add("line two");
list.Add("line three");
list.Add("line four");
list.Add("line five");
list.Add("line six");
list.Add("line seven");
list.Add("line eight");
list.Add("line nine");
list.Add("line ten");
string pattern = "%ine%e";
var res = from i in list
where System.Data.Linq.SqlClient.SqlMethods.Like(i, pattern)
select i;
Il n'a pas obtenir de moi en raison de System.Data.Linq.SqlClient.SqlMethods.Like
est seulement pour la traduction en SQL.
Fait quelque chose de similaire à sql LIKE
opérateur existe dans LINQ to Objects monde?
source d'informationauteur Anton Semenov | 2011-04-14
Vous devez vous connecter pour publier un commentaire.
Je n'en connais pas qui peuvent facilement existe, mais si vous êtes familier avec les expressions régulières, vous pouvez écrire votre propre:
Et puis dans votre code:
Cet extrait de code va imiter le comportement et la syntaxe de Sql LIKE. Vous pouvez l'envelopper dans un lambda ou de la méthode d'extension de votre propre pour une utilisation à l'intérieur d'une Linq déclaration:
Un malmenés ensemble de la méthode d'extension qui fonctionne comme
IEnumerable<T>.Where
méthode:Qui serait à son tour vous permettent de formater votre déclaration comme suit:
MODIFIER
Une amélioration de la mise en œuvre, devrait-on tomber sur et souhaitez utiliser ce code. Il convertit et compile les regex une fois à la place de chaque élément et la conversion de, COMME à l'expression régulière ci-dessus a quelques bugs.
Vous devez utiliser des Regex pour le modèle, puis d'utiliser la méthode d'extension
Where
à la parcourir et de trouver des matches.De sorte que votre code doit finir comme cela:
Si vous n'êtes pas familier avec la Regex, ce lit:
Premier 0 ou plusieurs caractères (.*) suivi par ine (ine) alors 0 ou plusieurs caractères (.*) ensuite, et e (e)et la e devrait être la fin de la chaîne ($)
1. L'Aide De La Chaîne.StartsWith ou Chaîne.Endswith
De l'écriture de la requête suivante:
qui est exactement ce que nous voulions. En va de même avec de la Ficelle.EndsWith.
Mais, qu'est-ce que nous voulons interroger le client avec le nom de la ville comme "L_n%"? (commence avec un Capital de "L", que certains caractère, que le " n " et que le reste du nom). L'aide de la requête
qui n'est pas exactement ce que nous voulions, et un peu plus compliqué.
2. À L'Aide De SqlMethods.Comme méthode
De creuser dans
System.Data.Linq.SqlClient
espace de noms, j'ai trouvé un peu de la classe helper appelé SqlMethods, qui peuvent être très utiles dans de tels scénarios. SqlMethods a une méthode appelée Comme, qui peut être utilisé dans une Linq to SQL de la requête:Cette méthode permet d'obtenir l'expression de chaîne de vérifier (la ville du client dans cet exemple) et les modèles à tester par rapport à ce qui est stipulé dans la même façon que vous voulez écrire une clause LIKE en SQL.
À l'aide de la requête ci-dessus généré le nécessaire instruction SQL:
Source: http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/10/16/linq-to-sql-like-operator.aspx
Je ne sais pas si cela existe, mais ici, c'est une mise en œuvre d'une méthode d'extension à l'aide de Knuth-Morris-Pratt algorithme que j'ai fait.