private int MaxPacksSince(Func <CardInstance, bool> filter) { if (OrderedPacks.Count() == 0) { return(0); } //indexes of searched packs var packIndexes = OrderedPacks.Select((p, index) => new { p, index }) .Where(col => col.p.Cards.Any(filter)) .Select(col => col.index); if (packIndexes.Count() == 0) { //nothing fulfills filter - return all! return(OrderedPacks.Count()); } else if (packIndexes.Count() == 1) { return(packIndexes.First()); } else { return(Math.Max(packIndexes.First(), packIndexes.Zip(packIndexes.Skip(1), (x, y) => y - x).Max() )); } }
private int PacksSince(Func <CardInstance, bool> filter) { if (OrderedPacks.Count() == 0) { return(0); } return(OrderedPacks .Where(p => p.DateOpened > OrderedPacks .Where(p2 => p2.Cards.Any(filter)) .DefaultIfEmpty(new Pack() { DateOpened = DateTime.MinValue }) .FirstOrDefault() .DateOpened ).Count()); }