作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想使用 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)
)
);
如何避免查询 UserPlans 两次?在 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 ))
)
最佳答案
只需使用内置的查询语法:
var users = from user in MyDbc.AspNetUsers
from plan in user.UserPlans.Where(m=>m.IsActive == 1)
where plan.PlanId == 2 || plan.PlanId == 3 && ...
在选择查询时间变量方面更加敏捷。当您的查询变大时,它更具可读性。对于简单的查询,我个人仍然使用纯 LINQ 扩展。
附言
正如 @juharr 在评论中提到的,您的查询可能会被 SQL 提供程序优化,因此您的性能很好,但查询的可读性和容错性确实很差。
关于c# - 如何在 EF 中重用 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54421163/
我是一名优秀的程序员,十分优秀!