回答

收藏

简单示例子查询Linq

技术问答 技术问答 117 人阅读 | 0 人回复 | 2023-09-13

T-SQL查询" s, h( t3 H' D1 T
Select * from dbo.User_Users
/ s0 }# v( Y2 A& h0 l6 bWhere UserID IN (Select UserID from Course_Enrollments)3 J2 m6 A( a& l% b+ S: D  g8 c" d: M! W
上面查询的LINQ to Entities替代
2 Y* n6 `+ e, Q4 Fvar innerquery = from en in Course_Enrollments+ Q; Q+ t* R' {% ^6 d3 Z
select en.UserID;
( e0 X4 f* W: z- jvar query = from u in User_Users: C$ r7 q! n5 I6 b. o2 n
where innerquery.Contains(u.UserID)
$ G+ W2 U' ^4 M, X7 Vselect u;
0 i; q% a$ @4 `在stackoverflow上有很多复杂的子查询,我只想看一个简单的例子,说明如何通过linq完成一个简单的子查询。+ y& b" J$ M+ P* a
                ! O' J3 l# l: m3 O+ |/ \
解决方案:! h. U* ^- j7 F
               
) o0 I/ b1 y1 U
' X3 p7 H( b/ i8 t( G: c4 ^. \4 k& E- k1 l. U. {% f
                简单的答案是使用 “ let” 关键字并生成一个子查询,该查询支持您的主要实体的条件集。2 B7 v7 ^% a% R+ B* U% G4 P( R
var usersEnrolledInCourses = from u in User_Users1 C3 X1 O3 f6 b$ j; @% c
                                 let ces = from ce in Course_Enrollments  L$ e. [1 A; q  _9 @
                                           select ce.UserID( ^! V' h6 g; o& u3 E; E
                                 where ces.Contains(u.UserID)
' {+ J: K% L  D2 u+ z7 D                             select u;- N$ K$ e" h8 X8 l
这将在TSQL中创建一个存在块,类似于5 F7 [1 \; l/ |
SELECT [Extent1].*& l9 }; `; b- _( T" V
   FROM dbo.User_Users AS Extent1
! L6 R* m' T0 x1 B' D   WHERE EXISTS (SELECT 1 AS [C1]  N/ r7 ~4 i5 y* c- Z# y  e
                     FROM dbo.Course_Enrollements AS Extent2
7 K" |( Z+ `4 P) N: z                     WHERE (Extent2.UserID = Extent1.UserId)); r5 u2 _/ W! v0 r9 g2 P1 x
它接近您的要求,通常会在SQL Server上创建相同的查询计划。: }! y! }+ z4 d% P. _% [
希望这可以帮助!
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则