为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 Linq 转换为 Sql?

如何将 Linq 转换为 Sql?

C#
繁星淼淼 2022-07-10 10:24:40
我想为表编写代码,我知道在 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并不总是优化掉,你最终可能会得到比必要更多的开销,所以我不喜欢这种方式。


查看完整回答
反对 回复 2022-07-10
?
凤凰求蛊

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);


查看完整回答
反对 回复 2022-07-10
  • 2 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信