因此,假设我有一个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/

10-11 20:14