Tell me, please, how can I return an object with the type IEnumerable<'a>? My code should return a list of objects with nested objects, for example:
[0] LG
{
[0].LG G3
[1].LG G4
}
[1] Xiaomi
{
...
}
Now I get a compilation error, and I can't find the type of method for it:
Error CS0266 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<<anonymous type: string Name, System.Collections.Generic.IEnumerable<ConsoleApp1.Phone> Phones>>' to 'System.Collections.Generic.IEnumerable<ConsoleApp1.Phone>'. An explicit conversion exists (are you missing a cast?)
My Code:
class Phone
{
public string Name { get; set; }
public string Company { get; set; }
}
class Program
{
static void Main(string[] args)
{
IEnumerable<Phone> GetInfo()
{
List<Phone> phones = new List<Phone>()
{
new Phone {Name="Lumia 430", Company="Microsoft" },
new Phone {Name="Mi 5", Company="Xiaomi" },
new Phone {Name="LG G 3", Company="LG" },
new Phone {Name="iPhone 5", Company="Apple" },
new Phone {Name="Lumia 930", Company="Microsoft" },
new Phone {Name="iPhone 6", Company="Apple" },
new Phone {Name="Lumia 630", Company="Microsoft" },
new Phone {Name="LG G 4", Company="LG" }
};
var result = (from phone in phones
group phone by phone.Company into g
select new
{
Name = g.Key,
Phones = from p in g select p
});
return result;
}
//my code with GetInfo()
}
}
You can return named tuple, say, (string company, Phone[] phones)
instead of anonymous class:
IEnumerable<(string company, Phone[] phones)> GetInfo() {
...
return phones
.GroupBy(phone => phone.Company)
.Select(group => (group.Key, group.ToArray()));
}