Đầu tiên nó có hiệu quả tạo ra một tra cứu từ chuỗi "bên trong", sau đó duyệt qua dãy bên ngoài. Sau đó, nó có thể tìm kiếm mỗi khóa từ trình tự bên ngoài và tạo ra mỗi cặp thích hợp. Một cái gì đó như thế này (bỏ qua xác thực đối số, v.v.):
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);
}
}
}
Tra cứu sẽ sử dụng bảng băm bên trong cho các phím, để tìm kiếm bất kỳ khóa nào hiệu quả.
Nguồn
2009-10-13 17:44:37
Phụ thuộc vào nhà cung cấp. –
Tôi có nghĩa là trong khi sử dụng LINQ To Objects – aattia