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

source Result<S>
selector Func<S, Task<T>>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
T

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

resultTask Task<Result<S>>
selector Func<S, Task<T>>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
T

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

resultTask Task<Result<S>>
selector Func<S, T>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
T

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

source Result<S>
selector Func<S, Task<Result<T>>>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
T

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

resultTask Task<Result<S>>
selector Func<S, Result<T>>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
T

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

resultTask Task<Result<S>>
selector Func<S, Task<Result<T>>>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
T

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

source Result<S>
selector Func<S, Result<I>>
resultSelector Func<S, I, Task<T>>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
I
T

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

source Result<S>
selector Func<S, Task<Result<I>>>
resultSelector Func<S, I, Task<T>>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
I
T

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

source Result<S>
selector Func<S, Task<Result<I>>>
resultSelector Func<S, I, T>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
I
T

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

resultTask Task<Result<S>>
selector Func<S, Result<I>>
resultSelector Func<S, I, Task<T>>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
I
T

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

resultTask Task<Result<S>>
selector Func<S, Result<I>>
resultSelector Func<S, I, T>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
I
T

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

resultTask Task<Result<S>>
selector Func<S, Task<Result<I>>>
resultSelector Func<S, I, Task<T>>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
I
T

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

resultTask Task<Result<S>>
selector Func<S, Task<Result<I>>>
resultSelector Func<S, I, T>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

S
I
T

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

source Result<S>
selector Func<S, Result<T>>

Returns

Result<T>

Type Parameters

S
T

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

source Result<S>
selector Func<S, Result<I>>
resultSelector Func<S, I, T>

Returns

Result<T>

Type Parameters

S
I
T

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

source Result<S>
selector Func<S, T>

Returns

Result<T>

Type Parameters

S
T

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

source Result<S>
predicate Func<S, Task<bool>>
errorMessage string
cancellationToken CancellationToken

Returns

Task<Result<S>>

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

source Result<S>
predicate Func<S, Task<bool>>
cancellationToken CancellationToken

Returns

Task<Result<S>>

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

resultTask Task<Result<S>>
predicate Func<S, bool>
errorMessage string
cancellationToken CancellationToken

Returns

Task<Result<S>>

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

resultTask Task<Result<S>>
predicate Func<S, Task<bool>>
errorMessage string
cancellationToken CancellationToken

Returns

Task<Result<S>>

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

source Result<S>
predicate Func<S, bool>

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

source Result<S>
predicate Func<S, bool>
errorMessage string

Returns

Result<S>

Type Parameters

S