T-SQL查询
Select * from dbo.User_Users
Where UserID IN (Select UserID from Course_Enrollments)
Run Code Online (Sandbox Code Playgroud)
LINQ to Entities替代Above Query
var innerquery = from en in Course_Enrollments
select en.UserID;
var query = from u in User_Users
where innerquery.Contains(u.UserID)
select u;
Run Code Online (Sandbox Code Playgroud)
stackoverflow上有很多复杂的子查询,我只是想看一个简单的子查询如何通过linq完成的例子.这就是我如何做到的,但它并不好,因为它向数据库发送了2个查询.
简单的答案是使用"let"关键字并生成支持主实体的条件集的子查询.
var usersEnrolledInCourses = from u in User_Users
let ces = from ce in Course_Enrollments
select ce.UserID
where ces.Contains(u.UserID)
select u;
Run Code Online (Sandbox Code Playgroud)
这将在TSQL中创建一个类似的存在块
SELECT [Extent1].*
FROM dbo.User_Users AS Extent1
WHERE EXISTS (SELECT 1 AS [C1]
FROM dbo.Course_Enrollements AS Extent2
WHERE (Extent2.UserID = Extent1.UserId))
Run Code Online (Sandbox Code Playgroud)
它接近您的要求,通常会在SQL Server上创建相同的查询计划.
希望这可以帮助!