[英]How To Convert Linq To Sql?
我想在SQL Server中为表编写代码,但是我不知道Linq或EF。
SQL Server代码:
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));
这应该足够了:
var drivers = db.Drivers
.Where(d => db.Drive_Car
.Any(dc => dc.Driver == d.ID && dc.Finish_Date != null));
这将导致Exists
,最终与IN
方法相同。 通过join复制行并通过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);
参考文献:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.