Expression Linq pour split

Le
Chris81
Bonjour,
j'ai cette expression

Expression tabCleRegroupement =
Expression.NewArrayInit(typeof(string[]),
Expression.Call(key,
typeof(string).GetMethod("Split", new Type[] {
typeof(string[]), typeof(StringSplitOptions) }),
Expression.Constant(new string[] { Cle.Separateur }),
Expression.Constant(StringSplitOptions.None)));


Key est la propriete key de mon IGrouping, donc c'est un string
Le separateur est :

public static string Separateur { get { return "_|_"; } }

Dans le cas ou j'ai Paris_|_Albi, est ce que d'apres vous mon split me
renvoie Paris et albi ??

merci
--
Utilisant le client e-mail révolutionnaire d'Opera :
http://www.opera.com/mail/
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jérémy Jeanson
Le #18444221
Bonjour Crhis81,

En théorie je dirais oui, mais une écriture comme celle-ci serrait peut
être plus simple à maintenir :

Func<String, String[]> f = c => c.Split(
new String[] { Cle.Separateur }, StringSplitOptions.None);

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Chris81
Le #18444641
Bonjour,

ok pour utiliser un func mais comment lui dire de travaille sur Key qui
est la propriete key de mon IGrouping.
Chris81
Le #18444631
Maintenant si je souhaite recuperer le 1° element du split, je fait

Expression.ArrayIndex(tabCleRegroupement, Expression.Constant(0));

lui ne me retourne pas un string mais un string[], est ce normal ?


Le Wed, 21 Jan 2009 08:59:53 +0100, Chris81
Bonjour,
j'ai cette expression

Expression tabCleRegroupement =
Expression.NewArrayInit(typeof(string[]),
Expression.Call(key,
typeof(string).GetMethod("Split", new Type[] {
typeof(string[]), typeof(StringSplitOptions) }),
Expression.Constant(new string[] { Cle.Separateur
}), Expression.Constant(StringSplitOptions.None)));


Key est la propriete key de mon IGrouping, donc c'est un string
Le separateur est :

public static string Separateur { get { return "_|_"; } }

Dans le cas ou j'ai Paris_|_Albi, est ce que d'apres vous mon split me
renvoie Paris et albi ??

merci





--
Utilisant le client e-mail révolutionnaire d'Opera :
http://www.opera.com/mail/
Chris81
Le #18444711
Pour que vous puissiez comprendre au mieux voici le code

Expression[] exp = new Expression[1];

Expression expSplit = Expression.Call(key,
typeof(string).GetMethod("Split", new Type[] {
typeof(string[]), typeof(StringSplitOptions) }),
Expression.Constant(new string[] { Cle.Separateur }),
Expression.Constant(StringSplitOptions.None));

Expression tabCleRegroupement = Expression.NewArrayInit(typeof(string[]),
expSplit);

//pour le test je ne souhaite recuperer que le 1° element du split
exp[0] = Expression.ArrayIndex(tabCleRegroupement, Expression.Constant(0));

//Expression.ToString() de exp[0] retourne {new [] {IGrouping<String,
Enregistrement>.Key.Split(value(System.String[]), None)}[0]}


Expression list =
Expression.ListInit(Expression.New(typeof(List<string>)),
typeof(List<string>).GetMethod("Add"), exp);
//Ici j'ai une erreur :
//Une expression de type 'System.String[]' ne peut pas être utilisée pour
un paramètre de type 'System.String' d'une méthode 'Void
Add(System.String)'


Comment faire pour corriger cette erreur et est elle normale ?


Merci
Jérémy Jeanson
Le #18445311
Oui cela semble normal car tu utilise une commande select, un selectmany
te permet de passer une table de table d'enregistrements en une table
contenant l'ensemble des enregistrements.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Chris81
Le #18445301
j'ai trouve

voici la réponse


Expression[] exp = new Expression[1];

Expression expSplit = Expression.Call(key,
typeof(string).GetMethod("Split", new Type[] {
typeof(string[]), typeof(StringSplitOptions) }),
Expression.Constant(new string[] { Cle.Separateur }),
Expression.Constant(StringSplitOptions.None));


//pour le test je ne souhaite recuperer que le 1° element du split
exp[0] = Expression.ArrayIndex(expSplit, Expression.Constant(0));

//Expression.ToString() de exp[0] retourne {new [] {IGrouping<String,
Enregistrement>.Key.Split(value(System.String[]), None)}[0]}


Expression list =
Expression.ListInit(Expression.New(typeof(List<string>)),
typeof(List<string>).GetMethod("Add"), exp);

Merci ++
Publicité
Poster une réponse
Anonyme