Таким образом, для каждого элемента objAs вы хотите взять Id, а если объект с таким же Id находится в objBs, вам нужен Id из objA и заголовок из objB.
Фактически, Поскольку Id для objA и objB равны, вам все равно, берете ли вы Id из objA или objB.
Вы не написали, что хотите, если в objB нет элемента с таким же Я бы. Давайте предположим, что в этом случае вам нужно значение null.
var result = objAs.GroupJoin(objBs, // GroupJoin A with B
objA => objA.Id, // from every element in A take the Id
objB => objB.Id, // from every element in B take the Id
// ResultSelector: take all elements of A, each with the matching elements from B
(objA, matchingObjBs) => new
{
Id = objA.Id,
Title = matchingObjBs.Select(objB => objB.Title).FirstOrDefault(),
});
Хорошая особенность GroupJoin состоит в том, что вы также получаете элемент из A, у которого нет соответствующего B. И если в B имеется более одного соответствующего элемента. вы берете первый.
Если вы не хотите, чтобы элементы из A, не имеющие совпадающего Id в B, достаточно взять только те элементы из B, которые имеют Id в A:
var idsA = objAs.Select(objA => objA.Id);
var result = objBs.Where(objB => idsA.Contains(objB.Id));