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
PARTS.CAR_ID
注意:数据库中的和CARS.ID
列之间没有外键关系。
如果没有外键,将使用哪种 linq 查询来获得这些结果:
CARS
ID CAR_MODEL PART_NAME_LIST
11 Mustang Steering Wheel
22 Camaro Steering Wheel, Headlights
33 F-150 (null)
环境:SQL Server 2014,linq-to-sql
编辑:这是我到目前为止所拥有的,但这会导致结果中有 4 行(Camaro 为 2 行),而不是 3 行,并且它不包括任何部分。
from C in db.CARS
join P in db.PARTS on C.ID equals P.CAR_ID
select new{
ID = C.ID,
CAR_MODEL = C.CAR_MODEL,
PART_NAME_LIST = ???
}
解决方案
对于连接字符串,您必须使用string.Join
. 最简单的方法是在子查询中:
(
from c in db.CARS
select new
{
ID = c.ID,
CAR_MODEL = c.CAR_MODEL,
PART_NAME_LIST = db.PARTS
.Where(p => c.ID equals p.CAR_ID)
.Select(p => p.PART_NAME)
}
).AsEnumerable()
.Select(c => new
{
ID = c.ID,
CAR_MODEL = c.CAR_MODEL,
PART_NAME_LIST = string.Join(", ", cPART_NAME_LIST)
})
实体框架不支持string.Join
,因此您必须将查询拆分为 EF 可以转换为 SQL 的部分和在内存中执行的部分,用 . 分隔AsEnumerable()
。
推荐阅读
- xamarin - 从 Xamarin 连接到 Back4App
- mysql - 查询响应时间过长
- javascript - 如何清理要插入 Carto Table 的用户输入数据?
- go - 在这个例子中如何理解 goroutines 的执行?
- android - 如何意图 JSONArray?
- django - 如何将字符串(不是来自表单)从 HTML 页面传输到服务器?
- github - 如何获得 github gist 的见解(流量等)?
- angular - 角度 cdk 拖放在延迟加载中不起作用
- html - 可以使徽标图像具有响应性,但在 div 中不起作用
- powershell - 如何使用 Get-WmiObject 获取 Windows“已安装更新视图”的完整列表,因为它出现在控制面板中