Example #1
0
        // test only
        public static Func <IEnumerable <Word>, IEnumerable <Word>, IEnumerable <Word>, int, IEnumerable <HealthRecord> > WithAllAnyNotWordsMinAny(ISession session)
        {
            return((all, any, not, minAny) =>
            {
                Contract.Ensures(Contract.Result <IEnumerable <HealthRecord> >() != null);

                if (any.Any() || all.Any())
                {
                    var withAny = WithAnyWords(session)(any.Any() ? any : all, minAny);
                    var withall = withAny.Where(hr => all.IsSubsetOf(hr.Words)); // записи где слова - надмножество all
                    return withall.Where(hr => !hr.Words.Any(w => not.Contains(w)));
                }
                else
                {
                    return WithoutAnyWord(session)(not);
                }
            });
        }
Example #2
0
        public static Func <IEnumerable <Word>, IEnumerable <Word>, IEnumerable <Word>, IEnumerable <HealthRecord> > WithAllAnyNotWords(ISession session)
        {
            return((all, any, not) =>
            {
                Contract.Ensures(Contract.Result <IEnumerable <HealthRecord> >() != null);

                // записи где слова - надмножество all
                // all.IsSubmultisetOf(hr.Words)
                // var withAny = withall.Where(hr => any.Any(w => hr.Words.DifferenceWith(all).Contains(w))); // TODO minany

                // записи где set(all) - подмножество слов записи
                //all.IsSubsetOf(hr.Words)

                if (any.Any() || all.Any())
                {
                    var withAny = WithAnyWord(session)(any.Any() ? any : all);
                    var withall = withAny.Where(hr => all.IsSubsetOf(hr.Words)); // записи где слова - надмножество all
                    return withall.Where(hr => !hr.Words.Any(w => not.Contains(w)));

                    //IEnumerable<HealthRecord> allany;
                    //if (any.Any() && all.Any())
                    //{
                    //    var withall = WithAllWords(session)(all);
                    //    allany = withall.Where(hr => any.Any(w => hr.Words.Contains(w)));
                    //}
                    //else if (any.Any())
                    //    allany = WithAnyWord(session)(any);
                    //else // all.Any()
                    //    allany = WithAllWords(session)(all);

                    //return allany.Where(hr => !hr.Words.Any(w => not.Contains(w)));
                }
                else
                {
                    return WithoutAnyWord(session)(not);
                }
            });
        }