tôi có thể nghĩ ra rất nhiều cách để thực hiện điều này, ví dụ:
DateTime[] col = { new DateTime(2010, 1, 1),
new DateTime(2010, 1, 2),
new DateTime(2010, 1, 3),
new DateTime(2010, 1, 5)};
var start = new DateTime(2010, 1, 1);
var end = new DateTime(2010, 1, 6);
var range = Enumerable.Range(0, (int)(end - start).TotalDays + 1)
.Select(i => start.AddDays(i));
var missing = range.Except(col);
Và bạn có thể đặt phạm vi-thứ vào một Extension-Phương pháp
public static class extensions
{
public static IEnumerable<DateTime> Range(this DateTime startDate, DateTime endDate)
{
return Enumerable.Range(0, (int)(endDate - startDate).TotalDays + 1)
.Select(i => startDate.AddDays(i));
}
}
Sau đó, nó sẽ chỉ đơn giản là
DateTime[] col = { new DateTime(2010, 1, 1),
new DateTime(2010, 1, 2),
new DateTime(2010, 1, 3),
new DateTime(2010, 1, 5)};
var start = new DateTime(2010, 1, 1);
var end = new DateTime(2010, 1, 6);
var missing = start.Range(end).Except(col);
Nhưng có lẽ đây không phải là một hiệu suất-giải pháp cao :-)
Thats tương tự như những gì tôi đã suy nghĩ ngoại trừ việc sử dụng một vòng lặp for để xây dựng phạm vi của tôi. Tôi chỉ không thích ý tưởng xây dựng một danh sách các ngày mỗi lần vì tôi phải làm điều đó rất nhiều. –
+1 Sử dụng tốt phạm vi. – Thomas
Vâng, sử dụng thông minh phạm vi;) –