2015-03-12 4 views
0

У меня есть три класса, Sql с внешними ключами.Linq SQL select условия второй уровень списка

public School 
{ 
int id; 
List<Room> Rooms; 
} 

public Room 
{ 
int id; 
ind idSchool; 
List<Chair> Chairs; 
} 


pulic Chair 
{ 
int id; 
int idRoom; 
int legs; 
} 

, когда я делаю запрос для школ в базу данных с помощью LINQ, возвращает все элементы (в каждой школе со всеми комнатами и каждый номер со всеми стульями)

Я хочу Школы с номерами с только три двуногих стульев . (! удалить из школы все chairs.legs = 3)

+3

показать свой запрос linq и где вы застряли? –

+0

Я не могу выполнить этот запрос linq. Что-то вроде этого: Список listSc = db.Schools.Where (s => s.Rooms.Where (r => r.Chairs.Where (c => c.legs == 3))). ToList(); Это неправильно, где необходимо условие –

ответ

2

Школы, которые содержат, по меньшей мере, одну комнату, по крайней мере один из трех ножках стула:

var filteredSchools = schools.Where(school => 
         school.Rooms.Any(room => 
          room.Chairs.Any(chair => chair.legs == 3))); 

Yo Вы упомянули, что вы получаете это из базы данных, поэтому, чтобы удалить стулья с тремя ногами, вы можете попробовать что-то вроде этого:

var chairIdsToRemove = filteredSchools.SelectMany(school => 
            school.Rooms.SelectMany(room => 
            room.Chairs.Where(chair => 
            chair.legs != 3).Select(chair => chair.id))) 
           .ToList(); 

// Remove chairs with ids in chairIdsToRemove from the database. 
+0

Да «Школы, которые содержат хотя бы одну комнату с хотя бы одним трехногим стулом», но неполны. Хочу снять стулья с ногами! = 3 –

+0

Смотрите мое обновление для второй части – Sam

Смежные вопросы