Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 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)));
 }