/// <summary> /// Define the term with which to compare string properties to /// </summary> /// <param name="terms">The terms to perform the Levenshtein distance against</param> /// <returns></returns> public IEnumerable <ILevenshteinDistance <T> > ComparedTo(params string[] terms) { var levenshteinDistanceExpression = EnumerableExpressionHelper.CalculateLevenshteinDistances(Properties, terms); var buildExpression = EnumerableExpressionHelper.ConstructLevenshteinResult <T>(levenshteinDistanceExpression, FirstParameter); var selectExpression = Expression.Lambda <Func <T, LevenshteinDistance <T> > >(buildExpression, FirstParameter).Compile(); var convertedSource = Source.Select(selectExpression.Invoke); return(new EnumerableLevenshteinCompare <ILevenshteinDistance <T> >(convertedSource)); }
/// <summary> /// Define the term with which to compare string properties to /// </summary> /// <param name="stringProperty">The property to perform the Levenshtein distance against</param> /// <returns></returns> public IEnumerable <ILevenshteinDistance <T> > ComparedTo(Expression <Func <T, string> > stringProperty) { var sourceProperty = this.Properties[0]; var targetProperty = this.AlignParameter(stringProperty); var levenshteinDistanceExpression = EnumerableExpressionHelper.CalculateLevenshteinDistance(sourceProperty, targetProperty); var buildExpression = EnumerableExpressionHelper.ConstructLevenshteinResult <T>(levenshteinDistanceExpression, this.FirstParameter); var selectExpression = Expression.Lambda <Func <T, LevenshteinDistance <T> > >(buildExpression, this.FirstParameter).Compile(); var convertedSource = this.Source.Select(selectExpression.Invoke); return(new EnumerableLevenshteinCompare <ILevenshteinDistance <T> >(convertedSource)); }