It looks like DynamicLinq's expression parser only supports a subset of the standard LINQ operator methods:
interface IEnumerableSignatures
{
void Where(bool predicate);
void Any();
void Any(bool predicate);
void All(bool predicate);
void Count();
void Count(bool predicate);
void Min(object selector);
void Max(object selector);
void Sum(int selector);
void Sum(int? selector);
void Sum(long selector);
void Sum(long? selector);
void Sum(float selector);
void Sum(float? selector);
void Sum(double selector);
void Sum(double? selector);
void Sum(decimal selector);
void Sum(decimal? selector);
void Average(int selector);
void Average(int? selector);
void Average(long selector);
void Average(long? selector);
void Average(float selector);
void Average(float? selector);
void Average(double selector);
void Average(double? selector);
void Average(decimal selector);
void Average(decimal? selector);
void Take(int count);
void Union(IQueryable right);
void OrderBy(LambdaExpression exp);
void OrderByDescending(LambdaExpression exp);
}
As you can see, ElementAt
is not among them. The good news is that simply adding void ElementAt(int index);
to IEnumerableSignatures
appears to work just fine. That is, of course, assuming the LINQ query provider you are using will handle the ElementAt
operator; it is entirely possible that it will not.
But if modifying the DynamicLinq source isn't an option, then no, there are no facilities within the core .NET Framework or LINQ which will parse and evaluate those kinds of expressions. There are other options (see ScriptCS, Roslyn), but I suspect you are drifting towards an "overkill" solution to whatever actual problem you are trying to solve.