Skip to content

Releases: EFNext/ExpressiveSharp

v0.8.0

04 Jun 01:26
Immutable release. Only release title and notes can be modified.
c7e9cba

Choose a tag to compare

New features

  • virtual/abstract/override [Expressive] members are now allowed. They expand using the static (declared) type of the receiver, so an overridden body is not used by query providers (EF Core, MongoDB). The new EXP0024 warning flags these and suggests workarounds (test the runtime type with a switch, or move the logic into a non-virtual static/extension method). (#66)
  • New analyzer EXP0029 (Info) — flags where an IExpressiveQueryable chain is silently dropped back to a plain IQueryable, losing [Expressive] expansion downstream. Includes a code fix. (#69)

Bug fixes

  • Average window function over nullable int?/long? now casts to floating point — no more integer-divided results (e.g. 1 instead of 1.5). (#67)
  • UnionBy interceptor stub had its second parameter mistyped as IEnumerable instead of IEnumerable, breaking interception. (#68)
  • Nested-lambda variable collision in multi-lambda interceptors (Join/GroupJoin) emitted duplicate locals → CS0128. Parameter names are now per-lambda prefixed. (#70)
  • Stale incremental cache on cross-file edits in ExpressiveGenerator, plus a separate cache-busting fix in PolyfillInterceptorGenerator. (#71, #73)
  • EF Core async terminals (ToListAsync/ToArrayAsync/etc.) now work directly on Include/ThenInclude chains and AsExpressiveDbSet() sets, without tripping the .NET 10 IAsyncEnumerable ambiguity. (#72)

Breaking changes

  • Diagnostic IDs were renumbered into a contiguous EXP0001–EXP0024 range. EXP0001–EXP0012 are unchanged; the [ExpressiveFor], [ExpressiveProperty], and "unsupported operation ignored" codes all shifted down. If you reference or suppress any of these in .editorconfig, , or #pragma, update them against docs/reference/diagnostics.md. (#69)
  • Virtual [Expressive] members now emit EXP0024. With TreatWarningsAsErrors, members that were previously silently ignored will now fail the build until resolved or suppressed. (#66)

Full Changelog: v0.7.3...v0.8.0

v0.7.3

16 May 18:24
Immutable release. Only release title and notes can be modified.
b3d8861

Choose a tag to compare

What's Changed

Full Changelog: v0.7.2...v0.7.3

v0.7.2

08 May 00:16
Immutable release. Only release title and notes can be modified.
7ee8480

Choose a tag to compare

What's Changed

  • Remove bad dependency and pin to stable version by @koenbeuk in #63

Full Changelog: v0.7.1...v0.7.2

v0.7.1

07 May 02:35
Immutable release. Only release title and notes can be modified.
b30c757

Choose a tag to compare

What's Changed

  • Add support for nullable enums in expressive properties by @koenbeuk in #61
  • Fix C# 14 extension members in [Expressive] generation by @koenbeuk in #62

Full Changelog: v0.7.0...v0.7.1

v0.7.0

05 May 01:04
Immutable release. Only release title and notes can be modified.
e9860ad

Choose a tag to compare

This particular release adds OpenTelemetry (Meter/ActivitySource) as well as an EventSource for debugging issues (docs provided). I intend for this library to be feature complete at this point and ready for a proper V1 release

What's Changed

Full Changelog: v0.6.5...v0.7.0

v0.6.5

02 May 00:57
Immutable release. Only release title and notes can be modified.
a7cb276

Choose a tag to compare

What's Changed

  • Add enum relational comparison support by @koenbeuk in #54

Full Changelog: v0.6.4...v0.6.5

v0.6.4

01 May 00:29
Immutable release. Only release title and notes can be modified.
9061489

Choose a tag to compare

What's Changed

  • fix: address issue #50 follow-ups (non-public properties, IQueryable upcasts) by @koenbeuk in #52

Full Changelog: v0.6.3...v0.6.4

v0.6.3

30 Apr 02:29
Immutable release. Only release title and notes can be modified.
c780a01

Choose a tag to compare

What's Changed

  • feat: implement Expression.Quote for lambda expressions in IQueryable chains to resolve issue #50 by @koenbeuk in #51

Full Changelog: v0.6.2...v0.6.3

v0.6.2

29 Apr 01:23
Immutable release. Only release title and notes can be modified.
b704352

Choose a tag to compare

What's Changed

  • Fix bugs related to nullable types and generic parameters by @koenbeuk in #49
  • Add NotExpressive attribute and related analyzer by @koenbeuk in #48

Full Changelog: v0.6.1...v0.6.2

v0.6.1

27 Apr 23:38
Immutable release. Only release title and notes can be modified.
98d1657

Choose a tag to compare

v0.6.1

Bug fixes

  • [ExpressiveProperty] stubs can now reference each other (#44, #45). Previously, defining one synthesized property in terms of another emitted EXP0008 and produced uncompilable generated code:

    public partial class Person
    {
        [ExpressiveProperty("FirstName")]
        private string FirstNameExpr => "Jane";
    
        [ExpressiveProperty("FullName")]
        private string FullNameExpr => FirstName + " Doe";  // referenced FirstName — broke
    }

    The generator now feeds its own synthesized partials back into the binding compilation, so [Expressive] and [ExpressiveProperty] members can resolve sibling synthesized properties exactly like hand-written ones.

Performance

  • Generator: hoist AugmentCompilation to a single per-run step. The augmented compilation used for binding synthesized partials is now computed once and threaded through all three downstream pipelines, instead of being rebuilt per [Expressive] member. Removes O(#expressives × #synthesized) work on larger projects.

Housekeeping

  • Trimmed verbose XML doc summaries, redundant section-header banners, and inline commentary across the codebase. No behavioral changes — generator output, runtime semantics, and tests are unaffected.
  • Codecov PR comments now show change requirements with a tighter layout; benchmarks workflow no longer runs on pull_request.

Upgrading

Drop-in replacement for v0.6.0. No code changes required.

Full Changelog: v0.6.0...v0.6.1