-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Open
Labels
api-ready-for-reviewAPI is ready for review, it is NOT ready for implementationAPI is ready for review, it is NOT ready for implementationapi-suggestionEarly API idea and discussion, it is NOT ready for implementationEarly API idea and discussion, it is NOT ready for implementationarea-System.Linq
Milestone
Description
Background and motivation
For simplicity of Join
it should just return (TOuter,TInner)
instead of the need for resultSelector
API Proposal
public static IEnumerable<(TOuter,TInner)> Join<TOuter, TInner, TKey>(
this IEnumerable<TOuter> outer,
IEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector,
Func<TInner, TKey> innerKeySelector);
public static IEnumerable<(TOuter,TInner?)> LeftJoin<TOuter, TInner, TKey>(
this IEnumerable<TOuter> outer,
IEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector,
Func<TInner, TKey> innerKeySelector);
public static IEnumerable<(TOuter?,TInner)> RightJoin<TOuter, TInner, TKey>(
this IEnumerable<TOuter> outer, IEnumerable<TInner> inner,
Func<TOuter, TKey> outerKeySelector,
Func<TInner, TKey> innerKeySelector);
API Usage
var keys = new[] { "x" ,"y" ,"z" };
var dict = new Dictionary<int,string>();
foreach (var (s,pair) in keys.Join(dict,(key) => key,(pair) => pair.Value))
Console.WriteLine(s + " : " pair.Key);
Alternative Designs
Without this it need to make another lambda just for return tuple
foreach (var (s,pair) in keys.Join(dict,(key) => key,(pair) => pair.Value,(outer,inner) => (outer,inner)))
Console.WriteLine(s + " : " pair.Key);
Also since the key might be calculated maybe the return should include key too?
public static partial class Enumerable
{
public static IEnumerable<(TKey,TOuter,TInner)> Join<TOuter, TInner, TKey>(this IEnumerable<TOuter> outer, IEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector, Func<TInner, TKey> innerKeySelector);
}
Risks
No response
timcassell
Metadata
Metadata
Assignees
Labels
api-ready-for-reviewAPI is ready for review, it is NOT ready for implementationAPI is ready for review, it is NOT ready for implementationapi-suggestionEarly API idea and discussion, it is NOT ready for implementationEarly API idea and discussion, it is NOT ready for implementationarea-System.Linq