Вопрос на самом деле не имеет смысла - каким будет тип результата? Пересечения должны выполняться на двух последовательностях одного типа. Звучит так, будто вы не так сильно хотите пересечения между двумя наборами, как фильтр первой последовательности, основанный на возможных значениях z2. Например:
HashSet<int> validZ2 = new HashSet<int>(listB.Select(x => x.j6));
var filtered = listA.Where(x => validZ2.Contains(x.z2));
Или, возможно, как предполагает Гейб, вы хотите присоединиться. Например:
var query = from a in listA
join b in listB on a.z2 equals b.j6
select new { a, b };
Это даст вам все пары значений из двух списков, которые совпадают на z2 / j6.