Forse la questione è difficile da spiegare tutti, ma qui è il problema che sto affrontando, ho un elenco di proprietà di un modelloCome ordinare un elenco per proprietà e raggruppare gli elementi in HTML Razor?
public class ViewModel
{
public int PropertyID {get;set;}
public DateTime Datefield {get;set}
public string OtherProperty {get;set;}
}
Poi riempire la lista con alcuni valori:
List<ViewModel> listOfValues = new List<ViewModel>();
listOfValues.Add(new ViewModel{
PropertyID = 1,
Datefield = new DateTime(2010, 5,25, 12,00,00),
OtherProperty = "Name1"
});
Immaginate la DateField ha questi valori:
0: 25/05/2010 12:00:00
1: 25/05/2010 12:00:00
2: 26/05/2010 13:00:00
3: 26/05/2010 13:00:00
4: 26/05/2010 14:00:00
5: 27/05/2010 12:00:00
Dopo di che ho ordinare la lista con semplice listOfElements.OrderBy(o => o.Datefield).ThenBy(o => o.Datefield.Hour);
per ordinare l'elenco per data prima, e di poppa er la data l'ora più recente.
Tutto funziona bene, ma poi un'esigenza è quella di "gruppo" gli elementi per data e l'ora, ma non con un GroupBy
di LINQ, ma con un rasoio in questo modo:
<div>
@Model.listOfElements[i].Datefield //0: 25/05/2010 12:00:00
@Model.listOfElements[i].Datefield //1: 25/05/2010 12:00:00
</div>
<div>
@Model.listOfElements[i].Datefield //2: 26/05/2010 13:00:00
@Model.listOfElements[i].Datefield //3: 26/05/2010 13:00:00
</div>
<div>
@Model.listOfElements[i].Datefield //4: 26/05/2010 14:00:00
</div>
<div>
@Model.listOfElements[i].Datefield //5: 27/05/2010 12:00:00
</div>
ho voluto raggrupparli per data e ora nel html, quindi quelli che corrispondono sono, ad esempio, in un div così posso dare loro lo stile che sono un po 'come un gruppo. Ho provato con qualche brutta sintassi del razor-html ma non penso che sia il modo migliore.
Spero che la domanda sia comprensibile.
È comprensibile - è necessario ottenere il ["giorno"] (https://msdn.microsoft.com/en-us/library/system.datetime.day%28v=vs.110%29.aspx) - ["mese"] (https://msdn.microsoft.com/en-us/library/system.datetime.month (v = vs.110) .aspx) come proprietà separate. Puoi farlo dal lato client (rasoio/js/jq, ecc.) Ma perché non creare solo due nuove proprietà nel tuo viewmodel? – wahwahwah
Ma come si confronta l'indice 0 againts index 1 ad esempio e si determina che sono la stessa data e ora. Quello che immagino è stato confrontare l'indice 0 e l'indice corrente + 1 in modo da poter confrontare il successivo e l'indice finale convalidare che non è fuori scala –
È difficile darti un consiglio succinto perché non sappiamo come stai compilando la tua lista '' ... Penso che StuartLC sia una buona scelta, ma perché l'indicizzazione della vostra lista è importante? –
wahwahwah