pierwsze skutecznie tworzy wyszukiwanie od „wewnętrznego” sekwencja, następnie przechodzi przez zewnętrzną sekwencji. Następnie może wyszukać każdy klucz z zewnętrznej sekwencji i uzyskać każdą odpowiednią parę. Coś jak ten (walidacji argumentów ignorując etc):
public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>
(this IEnumerable<TOuter> outer,
IEnumerable<TInner> inner,
Func<TOuter, TKey> outerKeySelector,
Func<TInner, TKey> innerKeySelector,
Func<TOuter, TInner, TResult> resultSelector)
{
Lookup<TKey, TInner> lookup = inner.ToLookup(innerKeySelector);
foreach (TOuter outerItem in outer)
{
TKey key = outerKeySelector(outerItem);
foreach (TInner innerItem in lookup[key])
{
yield return resultSelector(outerItem, innerItem);
}
}
}
na wyszukanie użyje tabeli mieszania wewnętrznie do kluczy, dzięki czemu jest to skuteczne, aby wyszukać dowolny indywidualny klucz.
W zależności od operatora. –
Miałem na myśli podczas używania Linq To Objects – aattia