Источник для метода расширения Dynamic LINQ Where:
public static IQueryable Where(this IQueryable source, string predicate, params object[] values) {
if (source == null) throw new ArgumentNullException("source");
if (predicate == null) throw new ArgumentNullException("predicate");
LambdaExpression lambda = DynamicExpression.ParseLambda(source.ElementType, typeof(bool), predicate, values);
return source.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Where",
new Type[] { source.ElementType },
source.Expression, Expression.Quote(lambda)));
}
Сложной частью является бит DynamicExpression.ParseLambda. Очень быстрый просмотр исходного кода показывает, что код синтаксического анализа включает функцию «ParseMemberAccess», которая, по-видимому, предполагает, что вы могли бы сделать что-то вроде:
ObjList.Where("GetValue('Name') == 'Mary' || GetValue('Age') < 24");
И, если синтаксический анализатор в настоящее время не позволяет этого, вы можете легко расширить его, чтобы он это сделал.