public static IReadOnlyLogbook Build <TModel>(IFieldCollection fields, IFieldValuePairs fieldValuePairs, IFieldPredicatePairs fieldPredicatePairs, out IEnumerable <QueryField> queryFields) where TModel : class, IModel, new()
        {
            queryFields = Enumerable.Empty <QueryField>();

            ILogbook logs = Logger.NewLogbook();

            if (!fields.IsSubsetOfModel <TModel>())
            {
                logs.Failure("Qualifier fields must be subset of model fields");

                return(logs);
            }

            ICollection <QueryField> queryFieldCollection = new Collection <QueryField>();

            foreach (Field field in fields)
            {
                bool valueFound     = fieldValuePairs.TryGetValue(field, out object value);
                bool predicateFound = fieldPredicatePairs.TryGetValue(field, out ReadOnlyLogbookPredicate <object> predicate);

                if (valueFound && predicateFound && predicate != null)
                {
                    logs.AddRange(predicate.Invoke(value));
                }

                if (!logs.Safely)
                {
                    break;
                }
            }

            return(logs);
        }
Example #2
0
        public static bool Build <TModel>(this IFieldCollection fieldCollection, out IEnumerable <Field> fields) where TModel : class, IModel, new()
        {
            fields = Enumerable.Empty <Field>();

            if (fieldCollection.HasField && fieldCollection.IsSubsetOfModel <TModel>())
            {
                fields = fieldCollection;

                return(true);
            }

            return(false);
        }