2010-07-02 2 views
0

J'ai une chaîne SQL comme suit:Obtenir des parties d'une chaîne dans une collection

select a, b, c from test where a = s and b = 3 

utilisant C# 2.0 Plus précisément, comment puis-je obtenir:

a = s, b = 3

Mais sous la forme d'une collection, un membre est "a = s", l'autre est "b = 3"?

Merci P.S. Les noms de tables ont été changés mais le point reste

EDIT: Je viens de me rendre compte que je pouvais obtenir une sous-chaîne d'où partir, puis la diviser là où il y a des virgules et un et. Y a-t-il un meilleur moyen?

+0

Vous n'aurez jamais une clause where qui a 'or' ou' in'? – R0MANARMY

+0

Je voudrais réellement. Rendre cela beaucoup plus difficile .. Une façon d'aller est d'avoir un ensemble de mots qui divisent les conditions where (par exemple Et), et l'utiliser pour diviser la chaîne en une collection. – dotnetdev

+0

Je voudrais jeter un oeil à cette question [Parsing SQL dans .NET] (http://stackoverflow.com/questions/76083/parsing-sql-in-net), un grammaire complète peut être exagéré, mais ce sera un peu plus compliqué que de simples manipulations de chaînes. – R0MANARMY

Répondre

0

Demandez-vous comment faire partie de la chaîne de requête SQL, en la divisant et en la stockant dans une collection?

Utilisez les fonctions de chaîne intégrées ou construisez une expression régulière pour les extraire. Une approche naïve serait de diviser la chaîne sql après 'where' puis de nouveau à chaque virgule. Ceci permet de ne séparer que les conditions séparées par une virgule. Si plus des conditions telles que « Et » ou « Ou » devraient être pris en charge puis les ajouter au tableau du deuxième appel split:

.Split(New String(){",", "or", "and"}, StringSplitOptions.RemoveEmptryEntries) 

Quel est le but d'isoler chacune de ces conditions?

+0

Son pour une application de visualisation de rapport où les parties de la requête sont fractionnées (quelque chose pour l'utilisateur). – dotnetdev

+0

soyez prudent en séparant ',' pour les cas où la clause 'where' a une instruction' in'. Vous pouvez avoir quelque chose comme 'AND a in (1,2,3)' et le fractionnement sur virgule retournera les ordures. – R0MANARMY

+0

Très bon point + 1. – dotnetdev

Questions connexes