假设您有以下两个表:
data claims;
length claim $50;
list = '18430109646000104331929350001,064380958490001,974317618110001,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.';
cnt=1;
claim=scan(list,cnt,'.,');
do while (claim ne '');
output;
cnt=cnt+1;
claim=scan(list,cnt,'.,');
end;
keep claim;
run;
您需要创建一个搜索表单。您将如何进行这项工作:
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
之间当前存在外键关系,但是由于某种原因,当我尝试使用u.PARTS时。我无法在列名称上追加。
有什么主意如何使此可选联接起作用?
答案 0 :(得分:1)
那样行不通,因为汽车可以有很多零件,因此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();
注意:我添加了第一个,只是因为我想显示正在发生的事情。