您如何使用 linq 有选择地加入表?
How do you selectively join in tables with 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();
目前 PARTS.CAR_ID
和 CARS.ID
之间存在外键关系,但由于某些原因,当我尝试 u.PARTS 时。我无法附加列名。
知道如何使这个可选的加入起作用吗?
那是行不通的,因为汽车可以有很多零件,因此 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();
注意:我添加了第一个,只是因为我想展示发生了什么。
假设您有这两个表:
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 时。我无法附加列名。
知道如何使这个可选的加入起作用吗?
那是行不通的,因为汽车可以有很多零件,因此 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();
注意:我添加了第一个,只是因为我想展示发生了什么。