using System.Collections.Generic;
public static void Main()
List<People> listA = new List<People>
new People { ID = 1, Name = "Andy" },
new People { ID = 2, Name = "Sam" }
List<People> listB = new List<People>
new People { ID = 1, Name = "Andy", Age = 10 }
var result = (from a in listA
join b in listB on new { a.ID, a.Name } equals new { b.ID, b.Name } into ab
from b in ab.DefaultIfEmpty()
foreach (var people in result)
Console.WriteLine($"{people.ID} {people.Name} {people.Age}");
public int ID { get; set; }
public string Name { get; set; }
public int? Age { get; set; }