I\'m messing around with LINQ for the first time, and I\'m using EF 4.1 code first.
I have entities containing nested Lists of other entities, for example:
Use Include
. This is the purpose of Include
, and there's no reason to write a bunch of nested select statements.
context.Releases.Include("OriginalTracks.OriginalArtist")
.Where(release => release.ReleaseID == id);
This is simpler to write, simpler to read, and preserves your existing data structure.
To use Include
you need to specify the name of the property you want to return - this means the name as it exists in your code, not in the database. For example:
.Include("OriginalTracks")
will include the OriginalTracks property on each Release.Include("OriginalTracks.OriginalArtist")
will include OriginalTracks property on each Release, and the OriginalArtist on each Track (note that it's not possible - syntactically or logically - to include an OriginalArtist within including the OriginalTrack).Include("OriginalTracks").Include("OtherProperty")
will include the OriginalTracks and OtherProperty objects on each Release. You can chain as many of these as you like, for example:
.Include("Tracks.Artist").Include("AnotherProperty")
.Include("ThirdProperty.SomeItems").Where(r => r.something);
is perfectly valid. The only requirement is that you put the Include
on the EntitySet, not on a query - you can't .Where().Include()
.