An expression tree may not contain a call or invocation that uses optional arguments
return this.RedirectToAction<MerchantController>(x => x.Edit(merchantId));
Where edit had a second, nullable argument.
Why is this?
Had the same message when trying to use Mock.setup to mock a method with multiple default parameters. I just had to add the additional parameters in the lambda.
void someMethod(string arg1 = "", string arg2 = "")
mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>()))
x.someMethod(default,default)
... can be used.
default
is very handy and simple syntax
Commented
Jun 11 at 14:36
The underlying expression tree API does not support optional arguments.
For IL-compiled code the C# compiler inserts the default values at compile time (hard-coded), because the CLR does not support calling methods with optional arguments either when the arguments are not provided explicitly.
Error: 'an exception tree may not contain a call or invocation that uses option arguments'
Why: Because you are not providing the optional parameters when calling the method. Mainly you get this with .net core when using IAsyncProxy service object.
Fix: Pass all the optional parameters value, you may use default value if you.
You might want to test that a method that has default parameters is called without any argument passed, in that case:
myMock.someMethod(default,default)
can work
I dealt with it by adding the optional parameter with a value . It worked. The same thing happened when I tried mocking while doing a setup .
I was getting this error with this:
var values = from ac in _dbContext.Entities<AuthCompany>()
from uc in _dbContext.Entities<UserCompany>()
.Where(x => x.CompanyID == ac.CompanyID).DefaultIfEmpty()
select ac;
I fixed it by extracting the DbQuery
s into their own variables:
var authCompanyEntities = _dbContext.Entities<AuthCompany>();
var userCompanyEntities = _dbContext.Entities<UserCompany>();
var values = from ac in authCompanyEntities
from uc in userCompanyEntities.Where(x => x.CompanyID == ac.CompanyID).DefaultIfEmpty()
select ac;