And*_*ner 1 c# linq iorderedenumerable
所以,假设我有一个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)
Run Code Online (Sandbox Code Playgroud)
如果这个实现不聪明,是否还有一些其他实现可以使它变得聪明?
不,这样做不够聪明.Enumerable.Where <TSource>接受Func <TSource,bool>,而不是像Queryable.Where <TSource>那样的Expression <Func <TSource,bool >>.所以你可以用IQueryable来做,但是你需要一个能够做到这一点的查询提供者.这可能不值得麻烦.
但是,这样的事情应该做:
orderedDates
.SkipWhile(x => x.datetime1 < afterDateTime)
.TakeWhile(x => x.datetime2 > beforeDateTime)
Run Code Online (Sandbox Code Playgroud)