I am not sure, if it is enough smart to reuse the result set, that's why I am using such querry:
var query = (from t in db.ThingTable
where t.Id == id
select t).FirstOrDefault();
if (query == null)
return null;
ThingTable result = query;
In this case you will get only one record that you need and no need to call First() to get first record.