gpt4 book ai didi

c# - 如何在 EF 中重用 where 子句

转载 作者:太空狗 更新时间:2023-10-30 00:47:49 25 4
gpt4 key购买 nike

我想使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com