Zastanawiam się, czy możliwe jest użycie LINQ do przestawienia danych z następującego układu:
CustID | OrderDate | Qty
1 | 1/1/2008 | 100
2 | 1/2/2008 | 200
1 | 2/2/2008 | 350
2 | 2/28/2008 | 221
1 | 3/12/2008 | 250
2 | 3/15/2008 | 2150
na coś takiego:
CustID | Jan- 2008 | Feb- 2008 | Mar - 2008 |
1 | 100 | 350 | 250
2 | 200 | 221 | 2150
linq
pivot-table
Tim Lentine
źródło
źródło
Odpowiedziałem na podobne pytanie używając metody rozszerzenia linq:
(+) implementacja ogólna
(-) zdecydowanie wolniejsza niż Amy B.
Czy ktoś może ulepszyć moją implementację (tj. Metoda robi kolejność kolumn i wierszy)?
źródło
Myślę, że najładniejsze podejście do tego polega na użyciu wyszukiwania:
źródło
Oto nieco bardziej ogólny sposób przestawiania danych za pomocą LINQ:
gdzie ValueKey to specjalna klasa reprezentująca klucz wielowymiarowy:
To podejście może być użyte do grupowania według wymiarów N (n> 2) i będzie działać dobrze dla raczej małych zbiorów danych. W przypadku dużych zbiorów danych (do 1 mln rekordów i więcej) lub w przypadkach, gdy konfiguracja przestawna nie może być zakodowana na stałe, napisałem specjalną bibliotekę PivotData (jest bezpłatna):
źródło
Jest to najbardziej efektywny sposób:
Sprawdź następujące podejście. Zamiast iterować po grupie klientów za każdym razem w każdym miesiącu.
Albo ten :
Kompletne rozwiązanie:
źródło
Pogrupuj dane według miesiąca, a następnie wyświetlaj je jako nowe dane z kolumnami dla każdego miesiąca. Nowa tabela byłaby Twoją tabelą przestawną.
źródło