Class ResultLINQExtensions
- Namespace
- REslava.Result.Extensions
- Assembly
- REslava.Result.dll
LINQ query syntax support for Result types. Enables functional composition using C# query expressions.
public static class ResultLINQExtensions
- Inheritance
-
ResultLINQExtensions
- Inherited Members
Methods
SelectAsync<S, T>(Result<S>, Func<S, Task<T>>, CancellationToken)
Asynchronously projects each element of a Result into a new form.
public static Task<Result<T>> SelectAsync<S, T>(this Result<S> source, Func<S, Task<T>> selector, CancellationToken cancellationToken = default)
Parameters
sourceResult<S>selectorFunc<S, Task<T>>cancellationTokenCancellationToken
Returns
Type Parameters
ST
SelectAsync<S, T>(Task<Result<S>>, Func<S, Task<T>>, CancellationToken)
Awaits the result then projects to a new value asynchronously.
public static Task<Result<T>> SelectAsync<S, T>(this Task<Result<S>> resultTask, Func<S, Task<T>> selector, CancellationToken cancellationToken = default)
Parameters
resultTaskTask<Result<S>>selectorFunc<S, Task<T>>cancellationTokenCancellationToken
Returns
Type Parameters
ST
SelectAsync<S, T>(Task<Result<S>>, Func<S, T>, CancellationToken)
Awaits the result then projects to a new value.
public static Task<Result<T>> SelectAsync<S, T>(this Task<Result<S>> resultTask, Func<S, T> selector, CancellationToken cancellationToken = default)
Parameters
resultTaskTask<Result<S>>selectorFunc<S, T>cancellationTokenCancellationToken
Returns
Type Parameters
ST
SelectManyAsync<S, T>(Result<S>, Func<S, Task<Result<T>>>, CancellationToken)
Asynchronously projects each element of a Result into a new Result.
public static Task<Result<T>> SelectManyAsync<S, T>(this Result<S> source, Func<S, Task<Result<T>>> selector, CancellationToken cancellationToken = default)
Parameters
sourceResult<S>selectorFunc<S, Task<Result<T>>>cancellationTokenCancellationToken
Returns
Type Parameters
ST
SelectManyAsync<S, T>(Task<Result<S>>, Func<S, Result<T>>, CancellationToken)
Awaits the result then projects each element into a new Result.
public static Task<Result<T>> SelectManyAsync<S, T>(this Task<Result<S>> resultTask, Func<S, Result<T>> selector, CancellationToken cancellationToken = default)
Parameters
resultTaskTask<Result<S>>selectorFunc<S, Result<T>>cancellationTokenCancellationToken
Returns
Type Parameters
ST
SelectManyAsync<S, T>(Task<Result<S>>, Func<S, Task<Result<T>>>, CancellationToken)
Awaits the result then asynchronously projects each element into a new Result.
public static Task<Result<T>> SelectManyAsync<S, T>(this Task<Result<S>> resultTask, Func<S, Task<Result<T>>> selector, CancellationToken cancellationToken = default)
Parameters
Returns
Type Parameters
ST
SelectManyAsync<S, I, T>(Result<S>, Func<S, Result<I>>, Func<S, I, Task<T>>, CancellationToken)
Mixed async/sync SelectMany: sync selector, async resultSelector.
public static Task<Result<T>> SelectManyAsync<S, I, T>(this Result<S> source, Func<S, Result<I>> selector, Func<S, I, Task<T>> resultSelector, CancellationToken cancellationToken = default)
Parameters
sourceResult<S>selectorFunc<S, Result<I>>resultSelectorFunc<S, I, Task<T>>cancellationTokenCancellationToken
Returns
Type Parameters
SIT
SelectManyAsync<S, I, T>(Result<S>, Func<S, Task<Result<I>>>, Func<S, I, Task<T>>, CancellationToken)
Asynchronously projects with query syntax support (both selector and resultSelector are async).
public static Task<Result<T>> SelectManyAsync<S, I, T>(this Result<S> source, Func<S, Task<Result<I>>> selector, Func<S, I, Task<T>> resultSelector, CancellationToken cancellationToken = default)
Parameters
sourceResult<S>selectorFunc<S, Task<Result<I>>>resultSelectorFunc<S, I, Task<T>>cancellationTokenCancellationToken
Returns
Type Parameters
SIT
SelectManyAsync<S, I, T>(Result<S>, Func<S, Task<Result<I>>>, Func<S, I, T>, CancellationToken)
Mixed async/sync SelectMany: async selector, sync resultSelector.
public static Task<Result<T>> SelectManyAsync<S, I, T>(this Result<S> source, Func<S, Task<Result<I>>> selector, Func<S, I, T> resultSelector, CancellationToken cancellationToken = default)
Parameters
sourceResult<S>selectorFunc<S, Task<Result<I>>>resultSelectorFunc<S, I, T>cancellationTokenCancellationToken
Returns
Type Parameters
SIT
SelectManyAsync<S, I, T>(Task<Result<S>>, Func<S, Result<I>>, Func<S, I, Task<T>>, CancellationToken)
Awaits the result then projects with query syntax support (sync selector, async resultSelector).
public static Task<Result<T>> SelectManyAsync<S, I, T>(this Task<Result<S>> resultTask, Func<S, Result<I>> selector, Func<S, I, Task<T>> resultSelector, CancellationToken cancellationToken = default)
Parameters
resultTaskTask<Result<S>>selectorFunc<S, Result<I>>resultSelectorFunc<S, I, Task<T>>cancellationTokenCancellationToken
Returns
Type Parameters
SIT
SelectManyAsync<S, I, T>(Task<Result<S>>, Func<S, Result<I>>, Func<S, I, T>, CancellationToken)
Awaits the result then projects with query syntax support (sync selector, sync resultSelector).
public static Task<Result<T>> SelectManyAsync<S, I, T>(this Task<Result<S>> resultTask, Func<S, Result<I>> selector, Func<S, I, T> resultSelector, CancellationToken cancellationToken = default)
Parameters
resultTaskTask<Result<S>>selectorFunc<S, Result<I>>resultSelectorFunc<S, I, T>cancellationTokenCancellationToken
Returns
Type Parameters
SIT
SelectManyAsync<S, I, T>(Task<Result<S>>, Func<S, Task<Result<I>>>, Func<S, I, Task<T>>, CancellationToken)
Awaits the result then projects with query syntax support (both selector and resultSelector are async).
public static Task<Result<T>> SelectManyAsync<S, I, T>(this Task<Result<S>> resultTask, Func<S, Task<Result<I>>> selector, Func<S, I, Task<T>> resultSelector, CancellationToken cancellationToken = default)
Parameters
resultTaskTask<Result<S>>selectorFunc<S, Task<Result<I>>>resultSelectorFunc<S, I, Task<T>>cancellationTokenCancellationToken
Returns
Type Parameters
SIT
SelectManyAsync<S, I, T>(Task<Result<S>>, Func<S, Task<Result<I>>>, Func<S, I, T>, CancellationToken)
Awaits the result then projects with query syntax support (async selector, sync resultSelector).
public static Task<Result<T>> SelectManyAsync<S, I, T>(this Task<Result<S>> resultTask, Func<S, Task<Result<I>>> selector, Func<S, I, T> resultSelector, CancellationToken cancellationToken = default)
Parameters
resultTaskTask<Result<S>>selectorFunc<S, Task<Result<I>>>resultSelectorFunc<S, I, T>cancellationTokenCancellationToken
Returns
Type Parameters
SIT
SelectMany<S, T>(Result<S>, Func<S, Result<T>>)
Projects each element of a Result into a new Result and flattens the resulting sequences. This is equivalent to Bind and enables LINQ query syntax.
public static Result<T> SelectMany<S, T>(this Result<S> source, Func<S, Result<T>> selector)
Parameters
Returns
- Result<T>
Type Parameters
ST
Examples
// Method syntax
var result = Result<int>.Ok(5)
.SelectMany(x => Result<string>.Ok(x.ToString()));
// Query syntax (single from clause uses this overload)
var result = from x in Result<int>.Ok(5)
select x * 2;
SelectMany<S, I, T>(Result<S>, Func<S, Result<I>>, Func<S, I, T>)
Projects each element of a Result into a new Result, invokes a result selector function on each element, and flattens the resulting sequences. This enables LINQ query syntax with multiple from clauses.
public static Result<T> SelectMany<S, I, T>(this Result<S> source, Func<S, Result<I>> selector, Func<S, I, T> resultSelector)
Parameters
Returns
- Result<T>
Type Parameters
SIT
Examples
// LINQ query syntax (uses this overload)
var result = from x in Result<int>.Ok(5)
from y in Result<int>.Ok(x * 2)
select x + y; // resultSelector: (x, y) => x + y
// Equivalent fluent syntax
var result = Result<int>.Ok(5)
.SelectMany(
x => Result<int>.Ok(x * 2),
(x, y) => x + y
);
Remarks
This is the overload that C# query syntax uses when you have multiple 'from' clauses. The resultSelector takes both the original value (S) and intermediate value (I) and produces a final value (T) - NOT a Result<T>. This is by design for LINQ compatibility.
Select<S, T>(Result<S>, Func<S, T>)
Projects each element of a Result into a new form. Equivalent to Map. Enables LINQ query syntax 'select' clause.
public static Result<T> Select<S, T>(this Result<S> source, Func<S, T> selector)
Parameters
Returns
- Result<T>
Type Parameters
ST
Examples
// Query syntax
var result = from x in Result<int>.Ok(5)
select x * 2;
// Method syntax
var result = Result<int>.Ok(5).Select(x => x * 2);
WhereAsync<S>(Result<S>, Func<S, Task<bool>>, string, CancellationToken)
Asynchronously filters a Result based on a predicate with custom error message.
public static Task<Result<S>> WhereAsync<S>(this Result<S> source, Func<S, Task<bool>> predicate, string errorMessage, CancellationToken cancellationToken = default)
Parameters
sourceResult<S>predicateFunc<S, Task<bool>>errorMessagestringcancellationTokenCancellationToken
Returns
Type Parameters
S
WhereAsync<S>(Result<S>, Func<S, Task<bool>>, CancellationToken)
Asynchronously filters a Result based on a predicate.
public static Task<Result<S>> WhereAsync<S>(this Result<S> source, Func<S, Task<bool>> predicate, CancellationToken cancellationToken = default)
Parameters
sourceResult<S>predicateFunc<S, Task<bool>>cancellationTokenCancellationToken
Returns
Type Parameters
S
WhereAsync<S>(Task<Result<S>>, Func<S, bool>, string, CancellationToken)
Awaits the result then filters based on a predicate.
public static Task<Result<S>> WhereAsync<S>(this Task<Result<S>> resultTask, Func<S, bool> predicate, string errorMessage, CancellationToken cancellationToken = default)
Parameters
resultTaskTask<Result<S>>predicateFunc<S, bool>errorMessagestringcancellationTokenCancellationToken
Returns
Type Parameters
S
WhereAsync<S>(Task<Result<S>>, Func<S, Task<bool>>, string, CancellationToken)
Awaits the result then filters based on an async predicate.
public static Task<Result<S>> WhereAsync<S>(this Task<Result<S>> resultTask, Func<S, Task<bool>> predicate, string errorMessage, CancellationToken cancellationToken = default)
Parameters
resultTaskTask<Result<S>>predicateFunc<S, Task<bool>>errorMessagestringcancellationTokenCancellationToken
Returns
Type Parameters
S
Where<S>(Result<S>, Func<S, bool>)
Filters a Result based on a predicate. If the predicate returns false, converts success to failure.
public static Result<S> Where<S>(this Result<S> source, Func<S, bool> predicate)
Parameters
Returns
- Result<S>
Type Parameters
S
Examples
var result = from x in Result<int>.Ok(5)
where x > 0
select x * 2;
Where<S>(Result<S>, Func<S, bool>, string)
Filters a Result based on a predicate with custom error message.
public static Result<S> Where<S>(this Result<S> source, Func<S, bool> predicate, string errorMessage)
Parameters
Returns
- Result<S>
Type Parameters
S