protected override Expression VisitMethodCall(MethodCallExpression node) { if (node.Arguments.Count != 2) { throw Utils.NotSupportedExpression(node); } var association = AddNestedExpandAssociationAndGetDeepestChild(node.Arguments[0]); switch (node.Method.Name) { case "Select": { association.ExpandAssociations.AddRange(ExtractNestedExpandAssociations(node.Arguments[1])); return(node); } case "OrderBy": case "ThenBy": { if ((node.Arguments[0] as MethodCallExpression)?.Method.Name == "Select") { throw Utils.NotSupportedExpression(node); } association.OrderByColumns .AddRange(node.Arguments[1] .ExtractColumnNames(_typeCache).Select(c => new ODataOrderByColumn(c, false))); return(node); } case "OrderByDescending": case "ThenByDescending": { if ((node.Arguments[0] as MethodCallExpression)?.Method.Name == "Select") { throw Utils.NotSupportedExpression(node); } association.OrderByColumns .AddRange(node.Arguments[1] .ExtractColumnNames(_typeCache).Select(c => new ODataOrderByColumn(c, true))); return(node); } case "Where": { var filterExpression = ODataExpression.FromLinqExpression((node.Arguments[1] as LambdaExpression)?.Body); if (ReferenceEquals(association.FilterExpression, null)) { association.FilterExpression = filterExpression; } else { association.FilterExpression = association.FilterExpression && filterExpression; } return(node); } default: throw Utils.NotSupportedExpression(node); } }
public FT Filter(Expression <Func <T, bool> > expression) { this.Command.Filter(ODataExpression.FromLinqExpression(expression.Body)); return(this as FT); }
public FT QueryOptions <U>(Expression <Func <U, bool> > expression) { this.Command.QueryOptions(ODataExpression.FromLinqExpression(expression.Body)); return(this as FT); }
public IBoundClient <T> Filter(Expression <Func <T, bool> > expression) { this.Command.Filter(ODataExpression.FromLinqExpression(expression.Body)); return(this); }