使用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说明。 |
|
|
|
|
|