MVC4では、ユーザーにSearchボックスを提供して、Tableの値を検索します。 は、だから私はC#で、サーバー側で式を使用したLINQフィルタの実装
を一般的なフィルタ条件を実装しています単一の式に例
表の列
についてはExpression<Func<T, bool>>
を形成するために、複数の式を結合するために助けが必要
MenuText、Role Name(Role.Name mapping)、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;}
}
私はあなたが
全ブログを使用することができるはず、いくつかの検索IQueryable
拡張メソッドを作成している
/// <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;
}
あなたは過去24時間以内にほぼ同じ質問を3回しました... – leppie