Here it is just an example. Suppose we have class Grouped (Items are gruoped by group name) as given below:
public class Grouped
{
public int Id { get; set; }
public string GroupName { get; set; }
public List<Item> Items{ get; set; }
}
public class Item
{
public string ItemName { get; set; }
}
What i need to do is to make a list of Normal Class from the above Grouped Object using only linq c# but not using ForEach or ForLoop.
pubic class Normal
{
public int Id { get; set;}
public string GroupName { get; set;}
public string ItemName { get; set;}
}
here is an example of list
Id | Name | Item |
---|---|---|
1 | A | X |
1 | A | Y |
2 | B | Y |
3 | C | X |
3 | C | Y |
3 | C | Z |
CodePudding user response:
If you have a collection of Grouped
(and you should, based on the desired output, otherwise there is no source for multiple Id
s) you can use SelectMany
to flatten a nested collection. Something along this lines:
IEnumerable<Grouped> grouped = ...;
var result = grouped
.SelectMany(g => g.Items.Select(i => new Normal
{
Id = g.Id,
GroupName = g.GroupName,
ItemName = i.ItemName
}))
.ToList();