Query EntityCollection - PullRequest
       27

Query EntityCollection

1 голос
/ 15 августа 2010

Я сопоставил свои классы способом EF по умолчанию, и все мои FK - это EntityCollection, например, Bike.Wheels будет EntityCollection.

Как мне работать с колесами?

  • Я хочу получить 1-е и 2-е колесо
  • Я хочу перебрать Колеса
  • Я хочу получить все колеса. Болты

Я не мог использовать get / select /[].

Я что-то упустил?

1 Ответ

3 голосов
/ 15 августа 2010

Ну, некоторые операции действительно просты - другие немного глупы - так что вы можете изменить некоторые из своих подходов, чтобы использовать простые методы.

Чтобы перебрать все ваши колеса, просто используйте выражение foreach:

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
       }           
   }
}

Получить первый, второй и т. Д. Коллекции немного сложнее, поскольку вы не можете использовать обычную индексацию массива. Вы можете:

  • использовать метод .Skip() - но это немного неуклюже для поиска одного объекта
  • если коллекция не слишком большая, вы можете "материализовать" ее в List<T> и затем использовать индексирование массива

Так что либо вы используете что-то вроде этого:

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

или вы материализуете коллекцию в список:

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

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