Mam następujące klasy, który jest wypełniany danymidołączyć kilka IEnumerable <> użyciu LINQ
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; }
}
Mam IEnumerable rezultatu, który ma dane jak poniżej:
IEnumerable<cntryData> result
USA
United States
2000 12
2001 22
2004 32
CAN
Canada
2001 29
2003 22
2004 24
chcę oceniać " wynik "obiekt za pomocą LINQ, aby uzyskać następujący wynik:
2000 USA 12 CAN null
2001 USA 22 CAN 29
2003 USA null CAN 22
2004 USA 32 CAN 24
Również jeśli wynik ma więcej krajów (np. Ch ina z wartością z 1995 roku 12), wynik powinien wyglądać następująco:
1995 USA null CAN null CHN 12
2000 USA 12 CAN null CHN null
2001 USA 22 CAN 29 CHN null
2003 USA null CAN 22 CHN null
2004 USA 32 CAN 24 CHN null
Czy można tego dokonać za pomocą LINQ? Dziękuję Ci.
chcesz spojrzeć na GroupBy() – Jonesopolis
wygląda chcesz [ "lewy outów -join "] (http://msdn.microsoft.com/en-us/library/vstudio/bb397895.aspx) w LINQ. Łącz wszystkie lata ze wszystkimi krajami. Otrzymasz zasięg w następujący sposób: 'int minYear = result.Min (c => c.data.Min (d => d.rok)); int maxYear = result.Max (c => c.data.Max (d => d.rok)); var range = Enumerable.Range (minYear, maxYear-min Year + 1); ' –
@TimSchmelter Jeśli pominiesz wiele lat, nie jest to zbyt dobre podejście. Jest to możliwe tylko wtedy, gdy wszystkie mieszczą się w dość niewielkim zakresie. – Servy