У меня есть запрос, например:
var query = from sessions in dataSet
where (names.Contains(sessions.Username))
where (sessions.Login.TimeOfAction == dt)
select new { sessions.Username,
sessions.Login,
sessions.Logout, sessions.Duration };
Я хочу реализовать ExpressionVisitor для извлечения ОБА предложений where как Lambda, но до сих пор мне удалось получить только первое, используя класс под названием «InnermostWhereFinder», который взят из учебника MSDN по пользовательскому поставщику запросов для веб-службы TerraServer. .
It is:
internal class InnermostWhereFinder : ExpressionVisitor
{
private MethodCallExpression innermostWhereExpression;
public MethodCallExpression GetInnermostWhere(Expression expression)
{
Visit(expression);
return innermostWhereExpression;
}
protected override Expression VisitMethodCall(MethodCallExpression expression)
{
if (expression.Method.Name == "Where")
innermostWhereExpression = expression;
Visit(expression.Arguments[0]);
return expression;
}
}
Я пытался сильно настроить этот класс, чтобы вернуть оба пункта where, но безуспешно. Не удалось найти никакой отличной документации по этому вопросу, может ли кто-нибудь помочь? Я думаю, что в конечном итоге это должно привести к созданию нескольких объектов LambdaExpression, с которыми я смогу работать.