я использую этот проект для использования jqgrid для фильтрации и сортировки коллекций .Единственная проблема, которую я вижу, если при циклическом просмотре коллекции и проверке свойства строкового поля значение null будет взорвано, приведенный ниже код.я хочу настроить код ниже, чтобы он создал лямбду, которая не только выполняет "ToString ()" и "Contains", но также поддерживает, если свойство имеет значение null (и обрабатывает его как string.empty)
Iв основном есть 2 входа в эту функцию ниже:
- FieldName
- Значение данных
, и код ниже динамически создает выражение для цикла черезсбор и проверка «Содержит» для свойства, которое отображается на передаваемое имя FieldName.
у меня есть код, который выглядит следующим образом:
ParameterExpression parameter = Expression.Parameter(query.ElementType, "p");
MemberExpression memberAccess = null;
MethodCallExpression memberAccessToString = null;
foreach (var property in column.Split('.'))
{
memberAccess = MemberExpression.Property(memberAccess ?? (parameter as Expression), property);
memberAccessToString = MemberExpression.Call(memberAccess, "ToString", new Type[] {}, new Expression[] {});
}
Expression condition = null;
LambdaExpression lambda = null;
case WhereOperation.Contains:
condition = Expression.Call(memberAccessToString,
typeof(string).GetMethod("Contains"),
Expression.Constant(value));
lambda = Expression.Lambda(condition, parameter);
MethodCallExpression result = Expression.Call(
typeof(Queryable), "Where",
new[] { query.ElementType },
query.Expression,
lambda);
return query.Provider.CreateQuery<T>(result);