Возможно, немного поздно, но другой подход - добавить метод Extention, который использует Contains
для имитации ключевого слова Like
как:
public static class DbHelpers
{
public static IQueryable<T> Like<T>(this IQueryable<T> source, string propertyName, string propertyValue)
{
var prop = typeof(T).GetProperty(propertyName);
if (prop == null || prop.PropertyType.Name.StartsWith("Int"))
return source;
ParameterExpression parameter = Expression.Parameter(typeof(T), "row");
Expression property = Expression.Property(parameter, propertyName);
Expression value = Expression.Constant(propertyValue);
var containsmethod = value.Type.GetMethod("Contains", new[] { typeof(string) });
var call = Expression.Call(property, containsmethod, value);
var lambda = Expression.Lambda<Func<T, bool>>(call, parameter);
return source.Where(lambda);
}
}
И его использование:
var foo = entity.AsQueryable().Like("Name", "bla bla");
Если отправить PropertyName
с типом int
, метод вернет исходную сущность, которую вы передали ему ранее.