因此,假设我有一个IEnumerable日期,并且我想获取一个范围内的日期。
Linq和IOrderedEnumerable是否足够智能,以实现现在已定日期的情况下选择更快算法的能力。
所以考虑一下:
IOrderedEnumerable<ObjectWith2DateTimes> orderedDates = dates.OrderBy(x => new Tuple(x.datetime1,x.datetime2));
...
this is called a bunch
...
DateTime afterDateTime = (some datetime)
DateTime beforeDateTime = (other datetime)
yield return orderedDates.Where(x => x.datetime1 >= afterDateTime && x.datetime2 <= beforeDateTime)
如果这种实现方式不明智,那么还有其他实现方式可以使其变得智能吗?
最佳答案
不,这样做不够聪明。 Enumerable.Where 需要一个Func ,而不是像Queryable.Where 这样的Expression 。因此,您可以使用IQueryable来做到这一点,但是您需要一个可以做到这一点的查询提供程序。这可能不值得麻烦。
但是,应该执行以下操作:
orderedDates
.SkipWhile(x => x.datetime1 < afterDateTime)
.TakeWhile(x => x.datetime2 > beforeDateTime)
关于c# - Linq使用IOrderedEnumerable的智能程度和位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22237391/