I have something like this in LinqPad
void Main()
{
var t1 = DateTimeOffset.Parse("10/1/2012");
int? n1 = 1;
Expression<Func<Sample,bool>> x1 = ud =>
(ud.Date == t1 && ud.Number == n1);
x1.ToString().Dump();
}
class Sample
{
public int? Number{set;get;}
public DateTimeOffset Date{set;get;}
}
it outputs
ud => ((ud.Date == value(UserQuery+<>c_DisplayClass0).t1) AndAlso (ud.Number == value(UserQuery+<>c_DisplayClass0).n1))
is there any possible way to keep the variables but have it output something like this:
ud => ((ud.Date == Parse("10/1/2012")) AndAlso (ud.Number == Convert(1)))
If you are OK taking a dependency on an implementation detail of Microsoft's .NET Framework/the CoreFX that will break at some time in the future, take a look at what's in the spoiler box below:
I'm going to emphasize this again: this is a private property.
Here we go; output first:
This will never output
Parse(...)
, because your expression does not contain a parse: you have already evaluated that by the time you put it into a lambda.Note also that this handles one level of captured variable. For more complex (nested) capture contexts, you'll have to recursively fetch the values from the capture classes: