Как сказал @JeroenMostert, это известная ошибка. Если вы действительно хотите использовать intellisense, вы можете указать свои типы; с result2 вы получите intellisense.
Вам просто нужно решить, стоит ли явно указывать ваши типы, тем более что это означает, что вы не можете действительно вернуть анонимный объект.
Лично я не думаю, что сделать ваш код более многословным стоит того, поскольку отсутствие intellisense не помешает вам настроить лямбду.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var people = new List<Person>();
var employees = new List<Employee>();
var result = employees.Join(people, x => x.Id, y => y.Id, (x, y) => new JoinedItem{ Id = x.Id, Name = y.Name });
var result2 = employees.Join<Employee, Person, int, JoinedItem>(people, x => x.Id, y => y.Id, (x, y) => new JoinedItem { Id = x.Id, Name = y.Name });
}
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
}
public class JoinedItem
{
public int Id { get; set; }
public string Name { get; set; }
}
}