Table of Contents

Class MaybeQueryableExtensions

Namespace
Trellis.EntityFrameworkCore
Assembly
Trellis.EntityFrameworkCore.dll

LINQ query extensions for Maybe<T> properties backed by generated nullable storage members. These methods rewrite the expression tree to target the underlying _camelCase storage member via Property<TProperty>(object, string), enabling EF Core to translate the query to SQL.

public static class MaybeQueryableExtensions
Inheritance
MaybeQueryableExtensions
Inherited Members

Remarks

Because the Trellis.EntityFrameworkCore.MaybeConvention ignores the Maybe<T> CLR property, EF Core cannot translate direct LINQ references to it. These extension methods provide a strongly-typed alternative to raw EF.Property calls.

// Instead of:
context.Customers.Where(c => EF.Property<PhoneNumber?>(c, "_phone") == null)

// Use: context.Customers.WhereNone(c => c.Phone)

Methods

OrderByMaybeDescending<TEntity, TInner>(IQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>)

Orders the query descending by the mapped storage field for the selected Maybe<T> property.

public static IOrderedQueryable<TEntity> OrderByMaybeDescending<TEntity, TInner>(this IQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector) where TEntity : class where TInner : notnull

Parameters

source IQueryable<TEntity>

The queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property.

Returns

IOrderedQueryable<TEntity>

An ordered queryable.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>.

OrderByMaybe<TEntity, TInner>(IQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>)

Orders the query ascending by the mapped storage field for the selected Maybe<T> property.

public static IOrderedQueryable<TEntity> OrderByMaybe<TEntity, TInner>(this IQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector) where TEntity : class where TInner : notnull

Parameters

source IQueryable<TEntity>

The queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property.

Returns

IOrderedQueryable<TEntity>

An ordered queryable.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>.

ThenByMaybeDescending<TEntity, TInner>(IOrderedQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>)

Adds a descending secondary ordering using the mapped storage field for the selected Maybe<T> property.

public static IOrderedQueryable<TEntity> ThenByMaybeDescending<TEntity, TInner>(this IOrderedQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector) where TEntity : class where TInner : notnull

Parameters

source IOrderedQueryable<TEntity>

The ordered queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property.

Returns

IOrderedQueryable<TEntity>

An ordered queryable.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>.

ThenByMaybe<TEntity, TInner>(IOrderedQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>)

Adds an ascending secondary ordering using the mapped storage field for the selected Maybe<T> property.

public static IOrderedQueryable<TEntity> ThenByMaybe<TEntity, TInner>(this IOrderedQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector) where TEntity : class where TInner : notnull

Parameters

source IOrderedQueryable<TEntity>

The ordered queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property.

Returns

IOrderedQueryable<TEntity>

An ordered queryable.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>.

WhereEquals<TEntity, TInner>(IQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>, TInner)

Filters the query to entities where the Maybe<T> property equals the specified value (mapped storage field = value).

public static IQueryable<TEntity> WhereEquals<TEntity, TInner>(this IQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector, TInner value) where TEntity : class where TInner : notnull

Parameters

source IQueryable<TEntity>

The queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property (e.g., c => c.Phone).

value TInner

The value to compare against.

Returns

IQueryable<TEntity>

A filtered queryable where the mapped storage field equals the value.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>.

Examples

var phone = PhoneNumber.Create("+15550100");
var matches = await context.Customers
    .WhereEquals(c => c.Phone, phone)
    .ToListAsync(ct);

WhereGreaterThanOrEqual<TEntity, TInner>(IQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>, TInner)

Filters the query to entities where the Maybe<T> property is greater than or equal to the specified value (mapped storage field >= value). Entities where the property has no value (NULL) are excluded.

public static IQueryable<TEntity> WhereGreaterThanOrEqual<TEntity, TInner>(this IQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector, TInner value) where TEntity : class where TInner : notnull, IComparable<TInner>

Parameters

source IQueryable<TEntity>

The queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property.

value TInner

The value to compare against.

Returns

IQueryable<TEntity>

A filtered queryable where the mapped storage field is greater than or equal to the value.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>. Must implement IComparable<T>.

WhereGreaterThan<TEntity, TInner>(IQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>, TInner)

Filters the query to entities where the Maybe<T> property is greater than the specified value (mapped storage field > value). Entities where the property has no value (NULL) are excluded.

public static IQueryable<TEntity> WhereGreaterThan<TEntity, TInner>(this IQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector, TInner value) where TEntity : class where TInner : notnull, IComparable<TInner>

Parameters

source IQueryable<TEntity>

The queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property.

value TInner

The value to compare against.

Returns

IQueryable<TEntity>

A filtered queryable where the mapped storage field is greater than the value.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>. Must implement IComparable<T>.

WhereHasValue<TEntity, TInner>(IQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>)

Filters the query to entities where the Maybe<T> property has a value (mapped storage field IS NOT NULL).

public static IQueryable<TEntity> WhereHasValue<TEntity, TInner>(this IQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector) where TEntity : class where TInner : notnull

Parameters

source IQueryable<TEntity>

The queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property (e.g., c => c.Phone).

Returns

IQueryable<TEntity>

A filtered queryable where the mapped storage field is NOT NULL.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>.

Examples

var customersWithPhone = await context.Customers
    .WhereHasValue(c => c.Phone)
    .ToListAsync(ct);

WhereLessThanOrEqual<TEntity, TInner>(IQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>, TInner)

Filters the query to entities where the Maybe<T> property is less than or equal to the specified value (mapped storage field <= value). Entities where the property has no value (NULL) are excluded.

public static IQueryable<TEntity> WhereLessThanOrEqual<TEntity, TInner>(this IQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector, TInner value) where TEntity : class where TInner : notnull, IComparable<TInner>

Parameters

source IQueryable<TEntity>

The queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property.

value TInner

The value to compare against.

Returns

IQueryable<TEntity>

A filtered queryable where the mapped storage field is less than or equal to the value.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>. Must implement IComparable<T>.

WhereLessThan<TEntity, TInner>(IQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>, TInner)

Filters the query to entities where the Maybe<T> property is less than the specified value (mapped storage field < value). Entities where the property has no value (NULL) are excluded.

public static IQueryable<TEntity> WhereLessThan<TEntity, TInner>(this IQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector, TInner value) where TEntity : class where TInner : notnull, IComparable<TInner>

Parameters

source IQueryable<TEntity>

The queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property (e.g., o => o.SubmittedAt).

value TInner

The value to compare against.

Returns

IQueryable<TEntity>

A filtered queryable where the mapped storage field is less than the value.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>. Must implement IComparable<T>.

Examples

Find orders submitted before a cutoff date:

var cutoff = DateTime.UtcNow.AddDays(-7);
var overdueOrders = await context.Orders
    .WhereLessThan(o => o.SubmittedAt, cutoff)
    .ToListAsync(ct);

WhereNone<TEntity, TInner>(IQueryable<TEntity>, Expression<Func<TEntity, Maybe<TInner>>>)

Filters the query to entities where the Maybe<T> property has no value (mapped storage field IS NULL).

public static IQueryable<TEntity> WhereNone<TEntity, TInner>(this IQueryable<TEntity> source, Expression<Func<TEntity, Maybe<TInner>>> propertySelector) where TEntity : class where TInner : notnull

Parameters

source IQueryable<TEntity>

The queryable source.

propertySelector Expression<Func<TEntity, Maybe<TInner>>>

An expression selecting the Maybe<T> property (e.g., c => c.Phone).

Returns

IQueryable<TEntity>

A filtered queryable where the mapped storage field is NULL.

Type Parameters

TEntity

The entity type.

TInner

The type wrapped in Maybe<T>.

Examples

var customersWithoutPhone = await context.Customers
    .WhereNone(c => c.Phone)
    .ToListAsync(ct);