using System.Collections.Generic;
public static void Main()
List<Property> properties = new List<Property>
new Property { PID =1, PropertyName = "aaa", Availability = true, Price = 20 },
new Property { PID =2, PropertyName = "bbb", Availability = false, Price = 10 },
new Property { PID =3, PropertyName = "ccc", Availability = true, Price = 50 },
new Property { PID =4, PropertyName = "ddd", Availability = false, Price = 80 },
new Property { PID =5, PropertyName = "eee", Availability = true, Price = 55 },
new Property { PID =6, PropertyName = "fff", Availability = false, Price = 70 }
List<Favorite> favorites = new List<Favorite>
new Favorite { FID =1, PID = 4, UserId = 1001 },
new Favorite { FID =2, PID = 2, UserId = 1005 },
new Favorite { FID =3, PID = 5, UserId = 1007 }
var result = from p in properties
join f in favorites.Where(x => x.UserId == 1005)
on p.PID equals f.PID into r
from r1 in r.DefaultIfEmpty()
PropertyName = p.PropertyName,
Availability = p.Availability,
FID = r1 != null ? r1.FID : 0,
UserId = r1 != null ? r1.UserId : 0
Console.WriteLine("PID\tPropertyName\tAvailability\tPrice\tFID\tUserId");
foreach (var item in result)
Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}", item.PID, item.PropertyName, item.Availability, item.Price, item.FID, item.UserId);
public int PID { get; set; }
public string PropertyName { get; set; }
public bool Availability { get; set; }
public decimal Price { get; set; }
public int FID { get; set; }
public int PID { get; set; }
public int UserId { get; set; }