Pregunta

I have a datatable with 3 columns:

Name                     age               profession 

John|James|Billy        25|31|28           professor 

I wanna split this row in order to have 3 rows:

Name                     age               profession 

John                     25                professor
James                    31                professor
Billy                    28                professor
¿Fue útil?

Solución

String.Split and loops are your friends.

var tblFlattenedStudents = tblStudents.Clone();
foreach (DataRow row in tblStudents.Rows)
{
    var names = row.Field<string>("Name").Split('|');
    var ages = row.Field<string>("age").Split('|');
    var profession = row.Field<string>("profession");
    for (int i = 0; i < names.Length; i++)
    {
        var newRow = tblFlattenedStudents.Rows.Add();
        newRow.SetField("Name", names[i]);
        newRow.SetField("age", ages.ElementAtOrDefault(i));
        newRow.SetField("profession", profession);
    }
}

Otros consejos

Assuming that you want a POCO and not a data table / data set here's some poorly written code which can meet your need.

public class Teacher
{
    public string Name { get; set; }
    public string Age { get; set; }
    public string Profession { get; set; }

    public static IEnumerable<Teacher> YieldFromCSV(string nameData, string ageData, string professionData)
    {
        // you really want to include error checking here
        var names = nameData.Split('|');
        var ages = ageData.Split('|');
        var professions = professionData.Split('|');

        for (var i = 0; i < names.Length; i++)
        {
            yield return new Teacher
                {
                    Name = names[i],
                    Age = ages.ElementAtOrDefault(i),
                    Profession = professions.ElementAtOrDefault(i) ?? professions.ElementAtOrDefault(0)
                };
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top