I am trying to convert object to a string using SelectMany. However when list property value is empty then I am not getting desired string.
I am expecting results like
name1-2-4 : name2-
but getting this result as
name1-2-4
. The second name is ignored because of "Scores" list which is empty.
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var person1 = new Person()
{
Name = "name1",
Scores = new List<Score>
{
new Score
{
InitialScore =2,
UpdatedScore = 4
}
}
};
var person2 = new Person()
{
Name = "name2",
Scores = new List<Score>()
};
var persons = new List<Person>();
persons.Add(person1);
persons.Add(person2);
var result = string.Join(" : ", persons.SelectMany(x=>x.Scores, (parent, child)=> parent.Name + "-" + child.InitialScore +"-"+ child.UpdatedScore));
Console.WriteLine(result);
}
}
public class Person
{
public string Name {get; set;}
public List<Score> Scores {get; set;}
}
public class Score
{
public int InitialScore {get; set;}
public int UpdatedScore {get; set;}
}
Edit: Based on @JonasH solution use this linq query.
var result = string.Join(" : ", persons.SelectMany(x=>GetNames(x)));