public static Expression SelectPropertyValue(Type type, string property, List <string> values, QueryFilterExpressionCollection queryFilter)
{
var valueType = GetPropertyType(type, property);
var parsedValuesAsObjects = values.Select(v => TryConvert(v, valueType)).ToList();
var parsedValues = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(valueType));
foreach (var parsedValueAsObject in parsedValuesAsObjects)
{
parsedValues.Add(parsedValueAsObject);
}
var param = Expression.Parameter(type, "i");
Expression propertyExpression = param;
foreach (var member in property.Split('.'))
{
propertyExpression = Expression.PropertyOrField(propertyExpression, member);
}
var expression = queryFilter.GetQueryFilterExpression(GetPropertyInfo(type, property));
return(typeof(Lambda)
.GetMethod(nameof(Convert), BindingFlags.Static | BindingFlags.NonPublic)
.MakeGenericMethod(valueType, type)
.Invoke(null, new object[] { expression, parsedValues, propertyExpression, param })
as Expression);
}