如何将 Linq 转换为 Sql?

我想为表编写代码,我知道在 SQL Server 中,但我不知道 Linq 或 EF。


SQL 服务器代码:


SELECT *

FROM Driver

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


繁星淼淼
浏览 115回答 2
2回答

holdtom

这应该足够了:var drivers = db.Drivers                 .Where(d => db.Drive_Car                               .Any(dc => dc.Driver == d.ID && dc.Finish_Date != null));这导致Exists,这最终与方法大致相同IN。通过连接复制行并将它们统一回来distinct并不总是优化掉,你最终可能会得到比必要更多的开销,所以我不喜欢这种方式。

凤凰求蛊

您可以使用 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);
打开App,查看更多内容
随时随地看视频慕课网APP