You can consider using automapper to copy the values for you. Check this for more info:http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/01/22/automapper-the-object-object-mapper.aspx
var query = from c in db.Category join o in db.book on c.id equals o.id into sr from x in sr.DefaultIfEmpty() select new { CategoryID = c.id, Name=c.name, BookID = x.id == null ? -1 : x.id};