Tôi có một DataColumn của DateTime, tôi muốn biết làm thế nào tôi có thể chỉ có ngày sớm hơn (tối thiểu) và ngày sau đó (tối đa).làm thế nào để tìm tối đa trong một datacolumn của datetime?
Cảm ơn
Tôi có một DataColumn của DateTime, tôi muốn biết làm thế nào tôi có thể chỉ có ngày sớm hơn (tối thiểu) và ngày sau đó (tối đa).làm thế nào để tìm tối đa trong một datacolumn của datetime?
Cảm ơn
này sẽ cung cấp cho những gì bạn đang tìm kiếm:
// 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) });
Đây là mã bạn sẽ sử dụng:
// 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();
cách tiếp cận của bạn trông đẹp nhất :) –
Chỉ cần truy xuất một danh sách của DateTime từ DataColumn của bạn, Foreach hàng trong DataColumn của bạn thêm phần tử hiện hành vào danh sách bạn của DateTime.
List<DateTime>
và sử dụng phương pháp Sort
sau đó nhận giá trị đầu tiên và cuối cùng.
Tùy thuộc vào phiên bản khuôn khổ của bạn, ví 2.0
sử dụng ở trên, cho >=3.5
bạn có thể sử dụng Max
và Min
hoặc Với LINQ .OrderByDesc(p => p.X).FirstOrDefault();
vào Danh sách DateTime bạn
Khi bạn có Danh sách <> bạn cũng có thể sử dụng Max() và Min(). Nhưng tôi nghĩ rằng đây là về việc nhận được danh sách. –
@Henk, Bạn tìm phương pháp đó ở đâu? Max() và Min(). –
Trong 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);
Để thêm vào các câu trả lời từ kyle, không phải là nó dễ dàng hơn để chỉ cần làm:
var first = tbl.AsEnumerable()
.Max(r => r.Field<DateTime>(col.ColumnName));
và
var first = tbl.AsEnumerable()
.Min(r => r.Field<DateTime>(col.ColumnName));
Chỉ cần một DataColumn? Nó có ràng buộc với một DataTable hay gì đó không? –