using System.Collections;
using System.Collections.Generic;
public interface IPredicate<TEntity>
bool IsSatisfiedBy(TEntity candidate);
public static void Main()
Console.WriteLine("Hello World");
public interface ICqmExpression
public string Value { get; set; }
public string CodeSystem { get; set; }
public string CodeSystemName { get; set; }
public string DisplayName { get; set; }
public string ValueSet { get; set; }
public string Unit { get; set; }
public class StatusCodeBase
public string Value { get; set; }
public class QualityDataModel
public virtual string CategoryId { get; set; }
public virtual string DataTypeId { get; set; }
public CodeBase Code { get; set; }
public string Text { get; set; }
public StatusCodeBase StatusCode { get; set; }
public virtual bool NegationIndicator { get; set; }
public interface ICondition<T, T2>{}
public class OccurrenceTracker<T>{}
public abstract partial class CqmExpression : ICqmExpression
private readonly IEvaluationStrategy _evaluationStrategy;
public CqmExpression(IEvaluationStrategy evaluationStrategy)
this._evaluationStrategy = evaluationStrategy;
public interface IEvaluationStrategy
public interface IEvaluationStrategy<T> : IEvaluationStrategy
IEnumerable<T> EvaluateToCollection();
public virtual bool Evaluate()
protected abstract bool EvaluateToBool();
#region Static Factory Methods
public static CqmExpression<TFactoryL, TFactoryR> Factory<TFactoryL, TFactoryR>(TFactoryL left, ICondition<TFactoryL, TFactoryR> condition, OccurrenceTracker<TFactoryR> right)
where TFactoryR : QualityDataModel
return new CqmExpression<TFactoryL, TFactoryR>(null );
public static CqmExpression<TFactoryL, TFactoryR> Factory<TFactoryL, TFactoryR>(TFactoryL left, ICondition<TFactoryL, TFactoryR> condition, TFactoryR right)
return new CqmExpression<TFactoryL, TFactoryR>(null );
public static CqmExpression<TFactoryL> Factory<TFactoryL>(IEnumerable<TFactoryL> left, ICondition<TFactoryL, DateRange> condition, DateRange dateRange)
return new CqmExpression<TFactoryL>(null );
public static CqmExpression<TFactoryLeft, TFactoryRight> Factory<TFactoryLeft, TFactoryRight>(IEnumerable<TFactoryLeft> left, ICondition<TFactoryLeft, TFactoryRight> condition, OccurrenceTracker<TFactoryRight> right)
where TFactoryRight : QualityDataModel
return new CqmExpression<TFactoryLeft, TFactoryRight>(null );
public static CqmExpression<TFactoryL, TFactoryR> Factory<TFactoryL, TFactoryR>(OccurrenceTracker<TFactoryL> left, ICondition<TFactoryL, TFactoryR> condition, OccurrenceTracker<TFactoryR> right)
where TFactoryL : QualityDataModel
where TFactoryR : QualityDataModel
return new CqmExpression<TFactoryL, TFactoryR>(null );
public static CqmExpression<TFactoryL, TFactoryR> Factory<TFactoryL, TFactoryR>(IEnumerable<TFactoryL> left, ICondition<TFactoryL, TFactoryR> condition, TFactoryR right)
return new CqmExpression<TFactoryL, TFactoryR>(null );
public static CqmExpression<TFactoryL, TFactoryR> Factory<TFactoryL, TFactoryR>(IEnumerable<TFactoryL> left, ICondition<TFactoryL, TFactoryR> condition, IEnumerable<TFactoryR> right)
return new CqmExpression<TFactoryL, TFactoryR>(null );
public static CqmExpression<TFactoryL, TFactoryR> Factory<TFactoryL, TFactoryR>(IEnumerable<TFactoryL> left, ICondition<TFactoryL, TFactoryR> condition, CqmExpression<TFactoryR> right)
return new CqmExpression<TFactoryL, TFactoryR>(null );
public static CqmExpression<TFactoryL, TFactoryR> Factory<TFactoryL, TFactoryR>(CqmExpression<TFactoryL> left, ICondition<TFactoryL, TFactoryR> condition, OccurrenceTracker<TFactoryR> right)
where TFactoryR : QualityDataModel
return new CqmExpression<TFactoryL, TFactoryR>(null );
#endregion Static Factory Methods
public class CqmExpression<LeftOperand> : CqmExpression, IEnumerable<LeftOperand>
protected internal readonly IEvaluationStrategy<LeftOperand> _evaluationStrategy;
protected readonly List<LeftOperand> _leftExpressions = new List<LeftOperand>();
public CqmExpression(IEvaluationStrategy<LeftOperand> evaluationStrategy)
: base(evaluationStrategy)
this._evaluationStrategy = evaluationStrategy;
public CqmExpression(IEvaluationStrategy evaluationStrategy)
: base(evaluationStrategy)
this._evaluationStrategy = (IEvaluationStrategy<LeftOperand>)evaluationStrategy;
IEnumerator IEnumerable.GetEnumerator()
public IEnumerator<LeftOperand> GetEnumerator()
SubsetEnumerator<LeftOperand> enumerator = new SubsetEnumerator<LeftOperand>(this._evaluationStrategy.EvaluateToCollection().ToList());
public void Add(LeftOperand leftExpressions)
this._leftExpressions.Add(leftExpressions);
protected override bool EvaluateToBool()
return this._evaluationStrategy.EvaluateToBool();
public partial class CqmExpression<LeftOperand, RightOperand> : CqmExpression<LeftOperand>
public CqmExpression(IEvaluationStrategy<LeftOperand> evaluationStrategy)
: base(evaluationStrategy)
public CqmExpression(IEvaluationStrategy evaluationStrategy)
: base(evaluationStrategy)
public class SubsetEnumerator<T2> : IEnumerator<T2>
private int position = -1;
public SubsetEnumerator(List<T2> subset)
public virtual bool MoveNext()
return (position < this.subset.Count());
public virtual void Reset()
object IEnumerator.Current
public virtual T2 Current
return this.subset.ElementAt(this.position);
catch (IndexOutOfRangeException)
throw new InvalidOperationException();
void IDisposable.Dispose()
public virtual void Dispose()