linq - 你如何有选择地加入带有 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_ID
,CARS.ID
但由于某种原因。我不能附加列名。
知道如何使这个可选的加入工作吗?
解决方案
那样是行不通的,因为汽车可以有很多零件,因此 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();
注意:我添加了第一个,只是因为我想展示发生了什么。
推荐阅读
- javascript - 单引号 (') 后的原子红色突出显示
- angular - 无法在应用模块中创建的子模块中实现路由
- spring-boot - Spring Boot 2.0.3 执行器与 Spring Boot 安全 CSRF 无效
- r - 正确评估列表列中的“rlang”表达式
- angular - Angular Universal - 排除路线
- r - Find the complement with the `subset` function in R
- javascript - 将数据格式化为文本,同时在数据表中向 excel 报告,但不工作
- java - 具有依赖注入错误的生产者/消费者模式
- sql - 有多少种方法可以生成将 varchar 转换为不会被 ISNUMERIC() 捕获的数字的错误?
- ssrs-2008 - 如何在 ssrs 单参数中创建父子层次结构