首页 > 解决方案 > 你如何有选择地加入带有 linq 的表?

问题描述

假设您有这两个表:

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();

当前,当我尝试 u.PARTS 时,和之间存在外键关系PARTS.CAR_IDCARS.ID但由于某种原因。我不能附加列名。

知道如何使这个可选的加入工作吗?

标签: linqlinq-to-entities

解决方案


那样是行不通的,因为汽车可以有很多零件,因此 u.PARTS 正在返回一个集合。这个问题有很多解决方案,你可以从 Cars 收集开始(就像你做的那样),或者你可以从 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();

注意:我添加了第一个,只是因为我想展示发生了什么。


推荐阅读