Remix.run Logo
javier2 4 days ago

It dont think C# looks at the code? I suspect it can track that you called p.Name, then generate sql with this information?

ziml77 4 days ago | parent | next [-]

The C# compiler is looking at that code. It sees that the lambda is being passed into a function which accepts an Expression as a parameter, so it compiles the lambda as an expression tree rather than behaving like it's a normal delegate.

adzm 4 days ago | parent | prev [-]

The lambda is converted into an Expression, basically a syntax tree, which is then analyzed to see what is accessed.

javier2 3 days ago | parent [-]

Ok, so its a step in the compile that rewrites and analyzes it?

adzm 2 days ago | parent [-]

It's actually really neat. Normally a lambda would just be a function but if it gets cast to an Expression then you get the AST at runtime. Entity Framework analyzes these at runtime to generate the SQL and logic/mapping etc. You can get the AST at compile time in some situations with a Roslyn plug-in or etc I believe as well.