using System; using System.Collections.Generic; using System.Linq; namespace TestApp { class Program { static void Main(string[] args) { var list1 = new List { new ItemOne {IDItem = 1, OneProperty = "1"}, new ItemOne {IDItem = 2, OneProperty = null}, new ItemOne {IDItem = 3, OneProperty = "3"}, new ItemOne {IDItem = 4, OneProperty = "4"} }; var list2 = new List { new ItemTwo {IDItem = 2, TwoProperty = "2"}, new ItemTwo {IDItem = 3, TwoProperty = "3"}, }; var query = from x in list1 join y in list2 on x.IDItem equals y.IDItem into z from q in z.DefaultIfEmpty() select new {IOne = x, ITwo = q}; foreach (var pair in query) { if (pair.ITwo != null) // && pair.IOne.OneProperty != null pair.IOne.OneProperty = pair.ITwo.TwoProperty; } var resultList = query.Select(x => x.IOne).ToList(); foreach (var one in resultList) { Console.WriteLine(one.OneProperty); } System.Console.ReadLine(); } public class ItemOne { public int IDItem { get; set; } public string OneProperty { get; set; } } public class ItemTwo { public int IDItem { get; set; } public string TwoProperty { get; set; } } } }