public ICollection <IEntryItem> GetEntryItems(IBook book, IAccountPredicate accountPredicate, IComparable startIndex, bool startInclusive, IComparable endIndex, bool endInclusive) { var result = _entryItems.Where(x => x.Book.Equals(book)); if (startIndex != null) { if (startInclusive) { result = result.Where(x => x.Entry.Index.CompareTo(startIndex) >= 0); } else { result = result.Where(x => x.Entry.Index.CompareTo(startIndex) > 0); } } if (endIndex != null) { if (endInclusive) { result = result.Where(x => x.Entry.Index.CompareTo(endIndex) <= 0); } else { result = result.Where(x => x.Entry.Index.CompareTo(endIndex) < 0); } } return(result.Where(x => accountPredicate.Matches(x.Account)).ToList()); }
protected ICollection <TItem> FindItems(IAccountPredicate predicate) { // Performance.MarkStart("ItemCollection.FindItems(predicate)"); var result = new List <TItem>(); if (predicate is QueryAccountPredicate) { FindItemsByQueryParts(_rootNode, ((QueryAccountPredicate)predicate).QueryParts, 0, result); } else if (predicate is OrAccountPredicate) { result = ((OrAccountPredicate)predicate).Predicates.SelectMany(FindItems).Distinct().ToList(); } else if (predicate is AndAccountPredicate) { throw new NotImplementedException(); } else { _rootNode.GetAllItems(result); result = result.Where(item => predicate.Matches(item.Account)).ToList(); } // Performance.MarkEnd("ItemCollection.FindItems(predicate)"); return(result); }
public static IEnumerable <IEntryItem> GetEntryItems(this IEnumerable <IEntry> entries, IBook book, IAccountPredicate predicate) { return(entries.SelectMany(x => x.Items).Where(x => x.Book.Equals(book) && predicate.Matches(x.Account))); }