我想为表编写代码,我知道在 SQL Server 中,但我不知道 Linq 或 EF。SQL 服务器代码:SELECT *FROM DriverWHERE id IN (SELECT Driver FROM Drive_Car WHERE Drive_Car.Finish_Date IS NOT NULL)我在 EF 中编写了这段代码,但它与 SQL Server 结果不匹配:var drivers = db.Drivers .Where(d => db.Drive_Car .Where(dc => dc.Driver == d.ID && dc.Finish_Date != null) .Select(dc => dc.Driver) .Contains(d.ID));
2 回答
holdtom
TA贡献1805条经验 获得超10个赞
这应该足够了:
var drivers = db.Drivers .Where(d => db.Drive_Car .Any(dc => dc.Driver == d.ID && dc.Finish_Date != null));
这导致Exists
,这最终与方法大致相同IN
。通过连接复制行并将它们统一回来distinct
并不总是优化掉,你最终可能会得到比必要更多的开销,所以我不喜欢这种方式。
凤凰求蛊
TA贡献1825条经验 获得超4个赞
您可以使用 Join 操作获得相同的结果。或者将命令分成两部分。
Linq SQL-Like 语法:
var query =
(from d in db.Driver
join dc in dc.Drive_Car on dc.Driver equals d.ID
where dc.Finish_Date != null
select d).Distinct();
其他方法(分成2部分)
var lst =
(from dc in dc.Drive_Car
where dc.Finish_Date != null
select dc.Driver).Distinct().ToList();
var query =
(from d in db.Driver
where lst.Contains(d.ID)
select d);
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消