Ответ 1
Хорошо, в LINQ to Objects разница может быть очень драматичной.
Первая форма рассматривает каждую пару c
и p
, проверяет на c.cid
равную p.pid
и дает совпадения.
Вторая форма (внутри Join
) сначала создает хэш-поиск от pid
до соответствия элементам Product
. Затем он передает categories
, а затем проверяет каждую категорию, в которой есть соответствующие элементы Product
в поиске, основанные на c.cid
. Это, как правило, гораздо более эффективно, так как нужно только просмотреть products
один раз и создать хэш-поиск. С другой стороны, он имеет больший объем памяти. Все это делается несколько лениво, конечно, только тогда, когда вы просите первый результат, что что-то существенное происходит.
Подробнее об операции Join
см. в разделе блога Edulinq по теме.