У меня есть запрос, например:
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 как лямбда-выражения, но до сих пор удалось получить только первое, используя класс InnermostWhereFinder, полученный из учебного пособия по MSDN о поставщике пользовательских запросов для TerraServer. веб-сервис.
Это:
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;
}
}
Я пытался настроить этот класс, чтобы вернуть оба предложения безуспешно. Не можете найти отличную документацию по этому вопросу, кто-нибудь может помочь? Я думаю, что в конечном итоге это приведет к созданию нескольких объектов LambdaExpression, с которыми я могу работать.