Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linq include with where clause

Hey so I've got the situation where I'm pulling a client back from the database and including all the case studies with it by way of an include

return (from c in db.Clients.Include("CaseStudies")
        where c.Id == clientId
        select c).First();

but what I want to do now is and a where clause on the included casestudies so that it only returns the case studies where deleted = false

sort of like this

return (from c in db.Clients.Include("CaseStudies")
        where c.Id == clientId
        && c.CaseStudy.Deleted == false
        select c).First();

But this doesn't work :( any ideas

like image 891
mat-mcloughlin Avatar asked Mar 01 '23 02:03

mat-mcloughlin


1 Answers

Conditional includes are not supported out-of-the-box in EF v1.0. But Alex James has a bit hacky workaround for that explained well here: http://blogs.msdn.com/alexj/archive/2009/10/13/tip-37-how-to-do-a-conditional-include.aspx

 var dbquery =
   from c in db.Clients
   where c.Id == clientID
   select new {
      client = c, 
      caseStudies = from cs in c.CaseStudy
                where cs.Deleted==false
                select cs
   };

return dbquery
   .AsEnumerable()
   .Select(c => c.client);

Also, I haven't succeeded to make this workaround work with many-to-many relationships.

like image 159
Misha N. Avatar answered Mar 29 '23 07:03

Misha N.