How hazzik/delegatedecompiler works
DelegateDecompiler turns compiled delegate or method bodies—especially computed properties and methods—into expression trees that LINQ providers can translate. The main workflow is to mark or explicitly select a computed member, decompile the query before materialization, and pass the rewritten expression to the underlying provider; EF6 and EF Core integrations add async and automatic-decompilation paths. The core reconstruction layer uses IL processors and control-flow support to build expressions, with visitors for decompilation and optimization. The supplied excerpts do not show every internal call, so uncertain links are omitted.
Main entry points: DecompiledQueryProvider.cs Query provider · AsyncDecompiledQueryProvider.cs EF6 async adapter · DelegateDecompileEntityQueryProvider.cs EF Core provider · DecompileExpressionVisitor.cs Decompile visitor
Components 20
Expression decompilation
- Computed markers
src/DelegateDecompiler/ComputedAttribute.cs - Decompiler config
src/DelegateDecompiler/Configuration.cs - Decompile extensions
src/DelegateDecompiler/DecompileExtensions.cs - Decompile visitor
src/DelegateDecompiler/DecompileExpressionVisitor.cs - Method body reader
src/DelegateDecompiler/MethodBodyDecompiler.cs - IL processor
src/DelegateDecompiler/Processor.cs - Opcode processors
src/DelegateDecompiler/Processors/CallProcessor.cs - Control-flow builder
src/DelegateDecompiler/ControlFlow/ControlFlowGraphBuilder.cs - Expression optimizer
src/DelegateDecompiler/OptimizeExpressionVisitor.cs
LINQ query integration
- Queryable extensions
src/DelegateDecompiler/DecompileExtensions.cs - Query provider
src/DelegateDecompiler/DecompiledQueryProvider.cs - Queryable wrapper
src/DelegateDecompiler/DecompiledQueryable.cs
ORM adapters
- EF6 async adapter
src/DelegateDecompiler.EntityFramework/AsyncDecompiledQueryProvider.cs - EF6 query wrapper
src/DelegateDecompiler.EntityFramework/AsyncDecompiledQueryable.cs - EF6 extensions
src/DelegateDecompiler.EntityFramework/DecompileExtensions.cs - EF Core provider
src/DelegateDecompiler.EntityFrameworkCore5/DelegateDecompileEntityQueryProvider.cs - EF Core options
src/DelegateDecompiler.EntityFrameworkCore5/DbContextOptionsBuilderExtensions.cs
Other components
- Application code
- ORM query source
- ORM database
Connections 25
- Application code → Computed markers: marks members
- Application code → Decompiler config: configures
- Application code → Queryable extensions: calls before materializing
- Queryable extensions → Query provider: wraps query
- Query provider → Decompile visitor: decompiles expression
- Decompile visitor → Method body reader: reads method body
- Method body reader → IL processor: processes IL
- IL processor → Opcode processors: dispatches opcodes
- Method body reader → Control-flow builder: uses control flow
- Query provider → Expression optimizer: optimizes expression
- Query provider → ORM query source: forwards rewritten query
- Query provider → Queryable wrapper: creates wrapper
- Queryable wrapper → ORM query source: enumerates
- Application code → EF6 extensions: uses async extension
- EF6 extensions → EF6 async adapter: wraps provider
- EF6 async adapter → Decompile visitor: decompiles expression
- EF6 async adapter → ORM query source: executes asynchronously
- EF6 async adapter → EF6 query wrapper: creates wrapper
- EF6 query wrapper → ORM query source: enumerates asynchronously
- Application code → EF Core options: enables automatic decompilation
- EF Core options → EF Core provider: installs provider
- EF Core provider → Decompile visitor: decompiles expression
- EF Core provider → Expression optimizer: optimizes expression
- EF Core provider → ORM database: executes query
- ORM query source → ORM database: executes query