Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Expression Linq pour split

6 réponses
Avatar
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/

6 réponses

Avatar
Jérémy Jeanson
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
Avatar
Chris81
Bonjour,

ok pour utiliser un func mais comment lui dire de travaille sur Key qui
est la propriete key de mon IGrouping.
Avatar
Chris81
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 <msnews.microsoft.com> a écrit:

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/
Avatar
Chris81
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
Avatar
Jérémy Jeanson
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
Avatar
Chris81
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 ++