Cerco ovunque e non ho trovato risposta a questa domanda. Voglio raggruppare in base agli intervalli (DateTime, Numerico) in Dynamic Linq (i dati verranno raggruppati dinamicamente, quindi devo usare Dynamic Linq)
Supponiamo che abbiamo tali dati:
ID|Date|Price
1|2010-11-01|100
2|2010-11-01|120
3|2010-11-02|50
4|2010-12-01|30
5|2010-12-01|220
6|2011-01-01|400
Come raggruppare questi dati in questo modo
- (Raggruppa per giorno) seguenti gruppi
->2010-11-01 = 2 elements
->2010-11-02 = 1 elements
->2010-12-01 = 2 elements
->2011-01-01 = 1 elements
- (Raggruppa per mese) seguenti gruppi
->2010-11 = 3 elements
->2010-12 = 2 elements
->2011-01 = 1 elements
- (Raggruppa per trimestre) seguenti gruppi
->2010 q.03 = 5 elements
->2011 q.01 = 1 elements
- (Raggruppa per anno) seguenti gruppi
->2010 = 5 elements
->2011 = 1 element
- (Raggruppa per prezzo (da 0, ogni 50)) seguenti gruppi
-> <0-50) = 1 elements
-> <50-100) = 1 elements
-> <100-150) = 2 elements
-> <200-250) = 1 elements
-> <400-450) = 1 elements
- (idealmente sarebbe Raggruppa per prezzo (Da 0-50, Da 50-150, Da 150-500)) seguenti gruppi
-> <0-50) = 1 elements
-> <50-150) = 3 elements
-> <150-500) = 2 elements
Qualche idea? Sottolineo di nuovo: deve essere DYNAMIC LINQ o eventualmente un'espressione lambda sofisticata? Dovrei essere in grado di "raggrupparlo" per nome di colonna che sarà nella stringa. per esempio
GroupBy("Date"), GroupBy("Price");
Ecco come farlo:
Per esempio:
Raggruppa per mese
public Item[] data =
{
new Item { Date = new DateTime(2011, 11, 6), Price = 103, Name = "a" },
new Item { Date = new DateTime(2011, 11, 16), Price = 110, Name = "b" },
new Item { Date = new DateTime(2011, 12, 4), Price = 200, Name = "c" },
new Item { Date = new DateTime(2011, 12, 4), Price = 230, Name = "d" },
new Item { Date = new DateTime(2012, 1, 15), Price = 117, Name = "e" }
};
var groups = data.AsQueryable().GroupBy("Date.Month", "it").Cast<IGrouping<int, Item>>();
Puoi usare "Date.Day" e "Date.Year" e per qualcosa come una fascia di prezzo puoi usare una funzione che mappa tutto nell'intervallo sullo stesso valore, ad es. Usando la divisione di numeri interi "(it.Price / 50)"