【发布时间】:2019-01-29 12:33:15
【问题描述】:
我想使用EF 进行查询,我的查询如下所示
var users = MyDbc.AspNetUsers.Where
(
d =>
(
d.UserPlans.Where(m => m.IsActive == 1).FirstOrDefault().PlanId == 2
||
(d.UserPlans.Where(m => m.IsActive == 1).FirstOrDefault().PlanId == 3
&& d.UserGroups.FirstOrDefault().Group.AdminId == d.Id)
)
);
如何避免两次查询用户计划?
在SQL 我会写以下内容
SELECT * FROM AspNetUsers U INNER JOIN UserPlan UP ON U.Id = UP.UserId
WHERE UP.IsActive = 1
AND (
PlanId=2 OR (PlanId=3 AND EXISTS(SELECT 1 FROM [Group] WHERE AdminId=U.Id ))
)
【问题讨论】:
-
整个 Linq 查询将被转换为一个 SQL 查询,因此您实际上并没有查询 UserPlans 两次。
-
您可以使用
((System.Data.Entity.Core.Objects.ObjectQuery)query).ToTraceString()轻松检查生成的 SQL 查询 -
我使用分析器检查查询,似乎我有两个
outer apply statements of UserPlans
标签: c# linq entity-framework-6