eachCustomersLatestProject
= from project in database.ProjectSet
join customer in database.CustomerSet
on project.Customer.ID = customer.ID
where project.DateofProject ==
database.ProjectSet.Where(p => p.Customer.ID == customer.ID)
.Max(p => p.DateofProject)
select project;
Now you can loop over the lastest projects.
Note You may be able optimized this futher, but right on top of my head this should be a huge performance gain for you.