J'ai un tableau composé des éléments suivants :
var schools = new [] {
new object[]{ new[]{ "1","2" }, "3","4" },
new object[]{ new[]{ "5","6" }, "7","8" },
new object[]{ new[]{ "9","10","11" }, "12","13" }
};
L'objet réel que j'essaie d'aplatir provient de l'importation de données dans un tableau de tableaux à partir d'un fichier CSV, puis d'une jointure sur les valeurs des champs :
var q =
from c in list
join p in vocatives on c.Line[name1].ToUpper() equals p.first_name.ToUpper() into ps
from p in ps.DefaultIfEmpty()
select new object[] { c.Line, p == null ? "(No vocative)" : p.vocative, p == null ? "(No sex)" : p.sex };
Je veux aplatir ce tableau de chaînes pour obtenir :
string[] {
new string[]{ "1","2","3","4" },
new string[]{ "5","6","7","8" },
new string[]{ "9","10","11","12","13" }
}
J'ai déjà une solution qui fait cela en boucle, elle n'est pas très performante, mais elle semble fonctionner correctement.
J'ai essayé d'utiliser SelectMany
mais ne peut pas trouver de solution.
Merci beaucoup pour vos commentaires ;) J'ai essayé la réponse de l'ONP :
var result = schools.Select(z => z.SelectMany(y=> y.GetType().IsArray
? (object[])y : new object[] { y })
);
Mais la méthode de la classe CSVwriter n'accepte que les types explicites :
IEnumerable<string[]>
Alors comment le faire en linq, j'ai essayé :
List<string[]> listOflists = (List<string[]>)result;
Mais rien n'y fait, InvalidCastException
se présente, malheureusement.