这可能是一个简单的修复,但我不能为我的生活想到如何做到这一点。我使用这个查询计算了一堆StartDates和End Dates到一堆日期数组中:
this.Reserved = unit.Reservations.Where(r => r.Active.HasValue && r.Active.Value).SelectMany(r => Utilities.DateRangeToArray(r.StartDate, r.EndDate)).ToArray();
Utilities.DateRangeToArray()定义如下:
public static IEnumerable<DateTime> DateRangeToArray(DateTime start, DateTime end) {
DateTime curDate = start;
while (curDate <= end) {
yield return curDate;
curDate.AddDays(1);
}
}
有没有办法减少内存消耗?
谢谢!
答案 0 :(得分:7)
您的代码已损坏 - AddDays
不会更改现有值,而是返回新值。你忽略了这个新值,从而创造了一个无限循环。
将您的代码更改为:
public static IEnumerable<DateTime> DateRangeToArray(DateTime start,
DateTime end) {
DateTime curDate = start;
while (curDate <= end) {
yield return curDate;
curDate = curDate.AddDays(1);
}
}
另一个提示:在您尝试在LINQ查询中使用该方法之前,单元测试可以帮助您找到此类问题。我也会更改名称,因为它没有返回数组。
答案 1 :(得分:0)
你确定你没有任何保留r.StartDate&gt; r.EndDate,对吗?如果你这样做,我认为你会得到一个无限循环。
答案 2 :(得分:0)
我假设在将结果转换为数组时内存不足。两点: