回答

收藏

使用Include时防止实体框架添加ORDER BY

技术问答 技术问答 300 人阅读 | 0 人回复 | 2023-09-14

我们有一个类似于以下内容的查询:
- g% ^" `* s) g, W( P8 xfrom x in db.Table.Include(x => x.Parent)
+ R) C, U. p" l3 D. \( Q4 v                  .Include(x => x.Parent.Relation). r% c* ~. H. k: R
                  .Include(x => x.Relation)
4 _& j5 x* _# F0 ?/ A# D+ {- b8 [                  .Include(x => x.Children)
4 S$ Z6 O7 q; E) C1 N8 _4 G% ewhere /* some query */
+ I0 J! O" m4 T4 U. F/ C' o$ R) Gselect x& K# Q! g  ^9 N. B, X# u
问题在于,在添加时.Include(x => x.Children),ORDER BY实体框架添加到生成的SQL的语句会使查询花费很长时间才能执行-6 ^5 P+ W5 ~" a/ w! p
类似于以下内容:8 p- O9 K6 T: s( b6 F
ORDER BY [Project2].[Id1] ASC, [Project2].[Id2] ASC, [Project2].[Id] ASC, [Project2].[C4] ASC6 l* e0 W: D. `/ ~. `
向linq查询中添加orderby也无济于事,除了添加其他列作为排序依据之外,它不会影响上面的语句。( I! y, t( H. Q# t% T$ u0 b3 ]
               
8 ~/ p% _4 b$ u2 j( x  M3 \解决方案:4 e, l0 e9 V( ]9 Z+ M
                8 G* W9 n/ i( Y( w. c$ _6 H

. X! n; K8 e2 \
5 q( ]! V. s1 q: K: c                显然,这是EF在内部做的事情,以简化事后创建对象的过程。您无法删除order by说明。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则