简单示例子查询Linq

时间:2014-08-18 00:45:42

标签: c# sql linq

T-SQL查询

Select * from dbo.User_Users
Where UserID IN (Select UserID from Course_Enrollments)

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;

stackoverflow上有很多复杂的子查询,我只是想看一个简单的子查询如何通过linq完成的例子。这就是我如何做到的,但它并不好,因为它向数据库发送了2个查询。

2 个答案:

答案 0 :(得分:6)

简单回答是使用 " 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;   

这将在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))

它接近您所要求的内容,并且通常会在SQL Server上创建相同的查询计划。

希望这有帮助!

答案 1 :(得分:0)

from u in User_Users
where u.Course_Enrollments.Any()
select u

如果您设置了外键。如果没有,你可以这样做

from u in User_Users
join cu in Course_Enrollments on u.UserId equals cu.UserId
select u

您还应该使用.Distinct()调用

来包装其中任何一个