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
sourceIQueryable<TEntity>The queryable source.
propertySelectorExpression<Func<TEntity, Maybe<TInner>>>An expression selecting the Maybe<T> property.
Returns
- IOrderedQueryable<TEntity>
An ordered queryable.
Type Parameters
TEntityThe entity type.
TInnerThe 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
sourceIQueryable<TEntity>The queryable source.
propertySelectorExpression<Func<TEntity, Maybe<TInner>>>An expression selecting the Maybe<T> property.
Returns
- IOrderedQueryable<TEntity>
An ordered queryable.
Type Parameters
TEntityThe entity type.
TInnerThe 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
sourceIOrderedQueryable<TEntity>The ordered queryable source.
propertySelectorExpression<Func<TEntity, Maybe<TInner>>>An expression selecting the Maybe<T> property.
Returns
- IOrderedQueryable<TEntity>
An ordered queryable.
Type Parameters
TEntityThe entity type.
TInnerThe 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
sourceIOrderedQueryable<TEntity>The ordered queryable source.
propertySelectorExpression<Func<TEntity, Maybe<TInner>>>An expression selecting the Maybe<T> property.
Returns
- IOrderedQueryable<TEntity>
An ordered queryable.
Type Parameters
TEntityThe entity type.
TInnerThe 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
sourceIQueryable<TEntity>The queryable source.
propertySelectorExpression<Func<TEntity, Maybe<TInner>>>An expression selecting the Maybe<T> property (e.g.,
c => c.Phone).valueTInnerThe value to compare against.
Returns
- IQueryable<TEntity>
A filtered queryable where the mapped storage field equals the value.
Type Parameters
TEntityThe entity type.
TInnerThe 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
sourceIQueryable<TEntity>The queryable source.
propertySelectorExpression<Func<TEntity, Maybe<TInner>>>An expression selecting the Maybe<T> property.
valueTInnerThe 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
TEntityThe entity type.
TInnerThe 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
sourceIQueryable<TEntity>The queryable source.
propertySelectorExpression<Func<TEntity, Maybe<TInner>>>An expression selecting the Maybe<T> property.
valueTInnerThe value to compare against.
Returns
- IQueryable<TEntity>
A filtered queryable where the mapped storage field is greater than the value.
Type Parameters
TEntityThe entity type.
TInnerThe 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
sourceIQueryable<TEntity>The queryable source.
propertySelectorExpression<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
TEntityThe entity type.
TInnerThe 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
sourceIQueryable<TEntity>The queryable source.
propertySelectorExpression<Func<TEntity, Maybe<TInner>>>An expression selecting the Maybe<T> property.
valueTInnerThe 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
TEntityThe entity type.
TInnerThe 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
sourceIQueryable<TEntity>The queryable source.
propertySelectorExpression<Func<TEntity, Maybe<TInner>>>An expression selecting the Maybe<T> property (e.g.,
o => o.SubmittedAt).valueTInnerThe value to compare against.
Returns
- IQueryable<TEntity>
A filtered queryable where the mapped storage field is less than the value.
Type Parameters
TEntityThe entity type.
TInnerThe 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
sourceIQueryable<TEntity>The queryable source.
propertySelectorExpression<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
TEntityThe entity type.
TInnerThe type wrapped in Maybe<T>.
Examples
var customersWithoutPhone = await context.Customers
.WhereNone(c => c.Phone)
.ToListAsync(ct);