Как вы выборочно объединяете таблицы с linq? - PullRequest
0 голосов
/ 15 октября 2018

Допустим, у вас есть две таблицы:

CARS
ID   CAR_MODEL 
11   Mustang          
22   Camaro           
33   F-150     

PARTS
ID   CAR_ID  PART_NAME       
1    11      Steering Wheel  
2    22      Steering Wheel 
3    22      Headlights

Вам необходимо создать форму поиска.Как бы вы сделали эту работу:

var query = db.CARS.include(u => u.PARTS);

if(model.CarPartName != "")
   query = query.where(u => u.PARTS.PART_NAME == model.CarPartName); //this doesn't work

return query.ToList();

В настоящее время существует связь между внешним ключом между PARTS.CAR_ID и CARS.ID, но по какой-то причине, когда я пытаюсь использовать u.PARTS.Я не могу добавить имя столбца.

Есть идеи, как заставить это необязательное объединение работать?

1 Ответ

0 голосов
/ 15 октября 2018

Это не сработает, потому что в машине может быть много частей, поэтому u.PARTS возвращает коллекцию.Существует много решений этой проблемы, вы можете начать с коллекции автомобилей (как вы это сделали), или вы можете начать с коллекции PARTS.Если бы вы начали с коллекции PARTS, она бы выглядела следующим образом:

var query = db.PARTS.Include(p => p.Car);

if(model.CarPartName != "")
   query = query.Where(u => u.PART_NAME == model.CarPartName); 

return query.Select(p => p.Car).Distinct().ToList();

С автомобилями:

var query = db.CARS.include(u => u.PARTS);

if(model.CarPartName != "")
   query = query.Where(u => u.PARTS.Any( up => up.PART_NAME == model.CarPartName)); 

return query.ToList();

Примечание: я добавил первый, просто потому, что хотел показать, что происходитна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...