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); }
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); }