I have a left outer join (below) returning results as expected. I need to limit the results from the ‘right’ table to the ‘first’ hit. Can I do that somehow? Currently, I get a result for every record in both tables, I only want to see one result from the table on the left (items) no matter how many results I have in the right table (photos).
var query = from i in db.items join p in db.photos on i.id equals p.item_id into tempPhoto from tp in tempPhoto.DefaultIfEmpty() orderby i.date descending select new { itemName = i.name, itemID = i.id, id = i.id, photoID = tp.PhotoID.ToString() }; GridView1.DataSource = query; GridView1.DataBind();
This will do the job for you.
I got this sql when I generated it against my own model (and without the name and second id columns in the projection).
When I asked for the plan, it showed that the subquery is implemented by this join: