Massive Boisson
Massive Boisson

Reputation: 1627

Query EntityCollection

I've mapped my classes with default EF way, and all my FKs are EntityCollection, so for example Bike.Wheels would be EntityCollection.

How do I work with Wheels?

I could not use get/select/[].

Am I missing something?

Upvotes: 1

Views: 1453

Answers (1)

marc_s
marc_s

Reputation: 755073

Well, some operations are really simple - others are a bit kludgy - so you might want to redesign some of your approaches to use the easy methods.

To loop over all your wheels, just use a foreach statement:

using(BikeEntities ctx = new BikeEntities())
{
   // assuming you just somehow pick a bike to inspect the wheels for
   Bike myBike = ctx.Bikes.FirstOrDefault(b => b.BikeID == 5);

   foreach(Wheel w in myBike.Wheels)
   {
       // do something with your wheel  
       foreach(Bolt b in w.Bolts)
       {
           // do something to al the bolts on your wheel
       }           
   }
}

Getting the first, second etc. of a collection is a bit more tricky, since you cannot use the usual array indexing. You can:

  • use the .Skip() method - but that's a bit clumsy for single object retrieval
  • if the collection isn't too big, you could "materialize" it into a List<T> and then use array indexing

So either you use something like this:

Wheel firstWheel = myBike.Wheels.FirstOrDefault();
Wheel secondWheel = myBike.Wheels.Skip(1).FirstOrDefault();

or you materialize the collection into a list:

List<Wheel> myWheels = myBike.Wheels.ToList();

Wheel firstWheel = myWheels[0];
Wheel secondWheel = myWheels[1];

Upvotes: 3

Related Questions