Ho una DataColumn di DateTime, vorrei sapere come posso avere solo la prima data (min) e la data successiva (max).come trovare il massimo in una colonna dati datetime?
Grazie
Ho una DataColumn di DateTime, vorrei sapere come posso avere solo la prima data (min) e la data successiva (max).come trovare il massimo in una colonna dati datetime?
Grazie
Questo darebbe quello che stai cercando:
// Initial Code for Testing
DataTable dt = new DataTable();
dt.Columns.Add("Dates", typeof(DateTime));
dt.Rows.Add(new object[] { DateTime.Now });
dt.Rows.Add(new object[] { DateTime.Now.AddDays(1) });
dt.Rows.Add(new object[] { DateTime.Now.AddDays(2) });
Questo è il codice che si desidera utilizzare:
// Actual Code
DataColumn col = dt.Columns[0]; // Call this the one you have
DataTable tbl = col.Table;
var first = tbl.AsEnumerable()
.Select(cols => cols.Field<DateTime>(col.ColumnName))
.OrderBy(p => p.Ticks)
.FirstOrDefault();
var last = tbl.AsEnumerable()
.Select(cols => cols.Field<DateTime>(col.ColumnName))
.OrderByDescending(p => p.Ticks)
.FirstOrDefault();
il tuo approccio sembra migliore :) –
Basta prelevare un elenco di DateTime dal DataColumn, Foreach fila nelle vostre DataColumn aggiungono l'elemento corrente nella tua lista di DateTime.
List<DateTime>
e utilizzare il metodo Sort
quindi ottenere il primo e l'ultimo valore.
A seconda della versione framework, per 2.0
uso sopra, per >=3.5
è possibile utilizzare Max
e Min
o Con LINQ .OrderByDesc(p => p.X).FirstOrDefault();
sulla tua lista DateTime
Una volta che hai la lista <> potresti anche usare Max() e Min(). Ma penso che si tratti di ottenere la lista. –
@Henk, dove trovi questo metodo? Max() e Min(). –
In Linq-to-Objects –
DataTable dt = new DataTable("MyDataTable");
DataColumn dc = new DataColumn("DateColumn");
dc.DataType = typeof(DateTime);
dt.Columns.Add(dc);
for (int i = 0; i <= 5; i++)
{
DataRow newRow = dt.NewRow();
newRow[0] = DateTime.Now.AddDays(i);
dt.Rows.Add(newRow);
}
DateTime maxDate =
Convert.ToDateTime(
((from DataRow dr in dt.Rows
orderby Convert.ToDateTime(dr["DateColumn"]) descending
select dr).FirstOrDefault()["DateColumn"]
)
);
DateTime minDate =
Convert.ToDateTime(
((from DataRow dr in dt.Rows
orderby Convert.ToDateTime(dr["DateColumn"]) ascending
select dr).FirstOrDefault()["DateColumn"]
)
);
object maxDate = dataTable.Compute("MAX(TheDateColumnName)", null);
object minDate = dataTable.Compute("MIN(TheDateColumnName)", null);
da aggiungere alla risposta da Kyle, non è più facile da fare solo:
var first = tbl.AsEnumerable()
.Max(r => r.Field<DateTime>(col.ColumnName));
e
var first = tbl.AsEnumerable()
.Min(r => r.Field<DateTime>(col.ColumnName));
Solo un DataColumn? È legato a un DataTable o qualcosa del genere? –