![](/img/trans.png)
[英]how can Calculate difference between two dates (number of days) using linq to entities?
[英]Calculate number of days left between two dates using LINQ query
我有一個解決方案,可以打印從今天到 2021 年 8 月 14 日的日期列表(星期五),它還打印到 2021 年 8 月 14 日的剩余天數,這是我在不同的功能中所做的,如何在一個 LINQ 查詢將打印日期並打印剩余天數。 這是我的代碼;
static void Main()
{
var dates = new List<DateTime>();
DateTime from = DateTime.Today;
DateTime to = new DateTime(2021, 08, 14);
double dayLeft = to.Subtract(DateTime.Today).TotalDays;
//var to = DateTime.Today.AddDays(14);
for (var dt = from; dt <= to; dt = dt.AddDays(1))
{
dates.Add(dt);
}
var allFridays = dates.Where(x => (int)x.DayOfWeek == 5);
Console.WriteLine(string.Join(Environment.NewLine, allFridays));
Console.WriteLine("Days Left are in Independence are : " + dayLeft);
Console.ReadKey();
}
我認為不可能在 1 Linq 查詢中實現這一點。
如果您真的想使用 Linq,您可以這樣做
DateTime from = DateTime.Today;
DateTime to = new DateTime(2021, 08, 14);
var mydates = Enumerable.Range(0, to.Subtract(from).Days).Select(x => from.AddDays(x));
Console.WriteLine(string.Join(Environment.NewLine, mydates.Where(x=> (int)x.DayOfWeek == 5)));
Console.WriteLine("Days Left are in Independence are : " + mydates.Count());
請記住,可讀性非常重要,因此 Linq 並不總是最好的(在某些情況下也不是最快的)。
唯一應該忽略的時間可讀性是,如果您對執行有時間限制並且軟件在時間范圍內完成。
首先計算這兩個日期之間的總天數,然后使用Enumerable 枚舉:
var difference = (to.Date - from.Date).TotalDays;
var dates = Enumerable.Range(0, (int)difference).Select(day => from.AddDays(day));
或者你可以在沒有LINQ
的情況下使用foreach
:
var dates = new List<DateTime>();
for(var i=0; i<difference; i++)
{
dates.Add(from.AddDays(i));
}
我不確定我是否理解你......,但似乎你想返回所有星期五和直到某個日期的日期計數。
我建議像這樣創建 class :
public class FridaysToDate
{
private DateTime startDate;
private DateTime endDate;
private DateTime firstFriday;
private int daysLeft = 0;
public FridaysToDate(DateTime _start, DateTime _end)
{
startDate = _start;
endDate = _end;
daysLeft = (int)(endDate - startDate).TotalDays;
firstFriday = NearestFriday(_start);
}
private DateTime NearestFriday(DateTime initialDate)
{
int daysToFriday = ((int) DayOfWeek.Friday - (int) initialDate.DayOfWeek + 7) % 7;
return initialDate.AddDays(daysToFriday);
}
public List<DateTime> AllFridays
{
get => Enumerable.Range(0, (int)((daysLeft)/7)+1)
.Select((x, y)=> firstFriday.AddDays(y*7))
.ToList();
}
public override string ToString()
{
return $"Until '{endDate.ToString("yyyy-MM-dd")}' left {daysLeft} days(s), including {AllFridays.Count} fridays.";
}
}
用法:
FridaysToDate ftd = new FridaysToDate(DateTime.Today, new DateTime(2021, 08, 14));
List<DateTime> fridays = ftd.AllFridays;
//you can use the list of fridays now
Console.WriteLine(ftd.ToString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.