static ProjectionBinder() { var nameBasedBinder = new NameBasedMethodCallBinder(); nameBasedBinder.Register(new AnyBinder(), "Any", "AnyAsync"); nameBasedBinder.Register(new AverageBinder(), "Average", "AverageAsync"); nameBasedBinder.Register(new CountBinder(), "Count", "CountAsync", "LongCount", "LongCountAsync"); nameBasedBinder.Register(new DistinctBinder(), node => node.Arguments.Count == 1, "Distinct"); nameBasedBinder.Register(new FirstBinder(), "First", "FirstAsync", "FirstOrDefault", "FirstOrDefaultAsync"); nameBasedBinder.Register(new CorrelatedGroupByBinder(), node => node.Arguments.Count == 2 && ExtensionExpressionVisitor.IsLambda(node.Arguments[1], 1), "GroupBy"); nameBasedBinder.Register(new GroupByWithResultSelectorBinder(), node => node.Arguments.Count == 3 && ExtensionExpressionVisitor.IsLambda(node.Arguments[1], 1) && ExtensionExpressionVisitor.IsLambda(node.Arguments[2], 2), "GroupBy"); nameBasedBinder.Register(new MaxBinder(), "Max", "MaxAsync"); nameBasedBinder.Register(new MinBinder(), "Min", "MinAsync"); nameBasedBinder.Register(new OfTypeBinder(), "OfType"); nameBasedBinder.Register(new OrderByBinder(), node => node.Arguments.Count == 2 && ExtensionExpressionVisitor.IsLambda(node.Arguments[1], 1), "OrderBy", "OrderByDescending", "ThenBy", "ThenByDescending"); nameBasedBinder.Register(new SelectBinder(), node => node.Arguments.Count == 2 && ExtensionExpressionVisitor.IsLambda(node.Arguments[1], 1), "Select"); nameBasedBinder.Register(new SingleBinder(), "Single", "SingleAsync", "SingleOrDefault", "SingleOrDefaultAsync"); nameBasedBinder.Register(new SkipBinder(), "Skip"); nameBasedBinder.Register(new TakeBinder(), "Take"); nameBasedBinder.Register(new SumBinder(), "Sum", "SumAsync"); nameBasedBinder.Register(new WhereBinder(), node => node.Arguments.Count == 2 && ExtensionExpressionVisitor.IsLambda(node.Arguments[1], 1), "Where"); __methodCallBinder = nameBasedBinder; }
public CompositeMethodCallBinder(MethodInfoMethodCallBinder <TBindingContext> infoBinder, NameBasedMethodCallBinder <TBindingContext> nameBinder) { _infoBinder = Ensure.IsNotNull(infoBinder, nameof(infoBinder)); _nameBinder = Ensure.IsNotNull(nameBinder, nameof(nameBinder)); }