В MVC4 я предоставляю пользователю окно поиска для поиска любых значений в таблице. Так я реализую Generic Filter Condition на стороне сервера в C#Реализация фильтра LINQ с выражениями
Нужна помощь, чтобы объединить несколько выражений, чтобы сформировать единое выражение
Expression<Func<T, bool>>
Для примера
Таблица Столбцы
MenuText, название роли (сопоставление ролей.), Actio nName
Теперь Если пользователь, введенный в поле поиска для ABC, который может быть в любой из строк в столбцах, указанных в столбцах, необходимо фильтровать.
Модель
public class Menu
{
public string MenuText {get;set;}
public Role Role {get;set;}
public string ActionName {get;set;}
}
public class Role
{
public string Name {get;set;}
}
До сих пор я реализовал
/// <summary>
/// string[] properties property.Name (MenuText, ActionName), including deeper Mapping names such as (Role.Name)
/// </summary>
public static Expression<Func<T, bool>> FilterKey<T>(string filterText, params string[] properties)
{
ParameterExpression parameter = Expression.Parameter(typeof (T));
Expression[] propertyExpressions = properties.Select(
x => !string.IsNullOrEmpty(x) ? GetDeepPropertyExpression(parameter, x) : null).ToArray();
Expression<Func<T, bool>> predicate = PredicateBuilder.False<T>();
foreach (Expression expression in propertyExpressions)
{
var toLower = Expression.Call(expression, typeof(string).GetMethod("ToLower", System.Type.EmptyTypes));
var like = Expression.Call(toLower, typeof(string).GetMethod("Contains"), Expression.Constant(filterText.ToLower()));
//TODO: Combine expressions to form single Expression<Func<T, bool>> expression
}
return predicate;
}
/// <summary>
/// To Get Deeper Properties such as Role.Name Expressions
/// </summary>
private static Expression GetDeepPropertyExpression(Expression initialInstance, string property)
{
Expression result = null;
foreach (string propertyName in property.Split('.'))
{
Expression instance = result ?? initialInstance;
result = Expression.Property(instance, propertyName);
}
return result;
}
Вы задали почти одинаковый вопрос 3 раза за последние 24 часа ... – leppie