public DictionaryColumn() { ITypeProvider typeProvider = TypeProviderFactory.Get(typeof(TColumnType)); _comparer = (IXArrayComparer <TColumnType>)typeProvider.TryGetComparer(); _copier = (IValueCopier <TColumnType>)typeProvider.TryGetCopier(); }
public static ComparerExtensions.Comparer TryGetComparer(this ITypeProvider typeProvider, CompareOperator op) { IXArrayComparer comparer = typeProvider.TryGetComparer(); if (comparer == null) { return(null); } return(comparer.TryBuild(op)); }
public static Comparer TryBuild(this IXArrayComparer comparer, CompareOperator cOp) { // Return text comparisons if this is a text comparer only IXArrayTextComparer textComparer = comparer as IXArrayTextComparer; if (textComparer != null) { switch (cOp) { case CompareOperator.Contains: return(textComparer.WhereContains); case CompareOperator.ContainsExact: return(textComparer.WhereContainsExact); case CompareOperator.StartsWith: return(textComparer.WhereStartsWith); case CompareOperator.EndsWith: return(textComparer.WhereEndsWith); } } // Return the function for the desired comparison operation switch (cOp) { case CompareOperator.Equal: return(comparer.WhereEqual); case CompareOperator.NotEqual: return(comparer.WhereNotEqual); case CompareOperator.GreaterThan: return(comparer.WhereGreaterThan); case CompareOperator.GreaterThanOrEqual: return(comparer.WhereGreaterThanOrEqual); case CompareOperator.LessThan: return(comparer.WhereLessThan); case CompareOperator.LessThanOrEqual: return(comparer.WhereLessThanOrEqual); case CompareOperator.Contains: // Contains resolves to Equals by default return(comparer.WhereEqual); } // Throw if this comparison isn't supported throw new ArgumentException($"{cOp} not supported for column"); }
public EqualityComparerAdapter(IXArrayComparer inner) { _inner = (IXArrayComparer <T>)inner; }