Another way:
var query = from lst1 in list1 let first = list2.FirstOrDefault(f => f.Id == lst1.Id) where first != null select first;
Or, if you want to know about elements that could not be located in list2:
var query = from lst1 in list1 let first = list2.FirstOrDefault(f => f.Id == lst1.Id) select first ?? new { Id = 0, Name = "Not Found" };
dugas source share