Update
Now you use the code below to create the data table:
var newresult = result.SelectMany(cntry => cntry.data.Select(d => new { id = cntry.countryid, name = cntry.countryname, year = d.year, value = d.value })) .GroupBy(f => f.year) .Select(g => new { year = g.Key, placeList = g.Select(p => new { p.id, p.value })}); DataTable table = new DataTable(); table.Columns.Add("Year"); foreach(string name in result.Select(x => x.countryid).Distinct()) table.Columns.Add(name); foreach(var item in newresult) { DataRow nr = table.NewRow(); nr["Year"] = item.year; foreach(var l in item.placeList) nr[l.id] = l.value; table.Rows.Add(nr); } table.Dump();
And what it looks like:

This is what linq can do, you can easily convert it to a data table, a list by year of locations and their values.
Smooth input and then group. Choose what you want. Like this
var newresult = result.SelectMany(cntry => cntry.data.Select(d => new { id = cntry.countryid, name = cntry.countryname, year = d.year, value = d.value })) .GroupBy(f => f.year) .Select(g => new { year = g.Key, placeList = g.Select(p => new { p.id, p.value })});
This is what the dump looks like in LinqPad.

Here is the full test code
void Main() { List<cntrydata> result = new List<cntrydata>() { new cntrydata() { countryid = "USA", countryname = "United States", data = new List<Data>() { new Data() { year = 2000, value = 12 }, new Data() { year = 2001, value = 22 }, new Data() { year = 2004, value = 32 } } }, new cntrydata() { countryid = "CAN", countryname = "Canada", data = new List<Data>() { new Data() { year = 2001, value = 29 }, new Data() { year = 2003, value = 22 }, new Data() { year = 2004, value = 24 } } } }; var newresult = result.SelectMany(cntry => cntry.data.Select(d => new { id = cntry.countryid, name = cntry.countryname, year = d.year, value = d.value })) .GroupBy(f => f.year) .Select(g => new { year = g.Key, placeList = g.Select(p => new { p.id, p.value })}); newresult.Dump(); } public class cntrydata { public string countryid { get; set; } public string countryname { get; set; } public IEnumerable<Data> data { get; set; } } public class Data { public int year { get; set; } public float value { get; set; } }