【发布时间】:2017-09-22 13:26:12
【问题描述】:
我有以下 LINQ 查询:
returnVal = context.ReservationRequests
.Where(s => ((s.RequestStatusId.HasValue) &&
(s.RequestStatusId.Value == ResStatusId)) &&
((string.IsNullOrEmpty(loggedInUserRole)
|| s.SubmitterGroupName == loggedInUserRole)
||(s.CreatedBy == ApplicationSecurityDirector.CurrentUserGuid)))
.Skip(skip)
.Take(take)
.ToList();
这个 LINQ 查询应该做什么,它查看 ReservationRequests 表并查找 RequestStatusId = (suppliedRequestStatusId) 和 SubmitterGroupName 应该等于登录用户角色的记录(但在某些情况下,用户未分配给任何角色),它还应该返回用户创建的任何请求。 因此,如果分配给特定组,则基本上返回所有记录,如果有的话,还返回由登录人员创建的请求。
如果用户登录到一个组,但当用户未分配到任何组时,它不会返回正确的结果,则上述查询可以正常工作。如果人员未分配到任何组,则应返回由用户创建的任何记录。
下面是我编写的一个 SQL 查询,它为我的所有案例返回正确数量的记录,我基本上需要我的 LINQ 像这个 sql 但我不确定我在这里缺少什么。
SELECT *
FROM [MyDB].[dbo].[ReservationRequests]
where
(RequestStatusId = 2)
and
(SubmitterGroupName != null or SubmitterGroupName = null
or createdby = 'C5188D45-TEST-45BE-8C04-123455733A31')
有人可以查看我的 LINQ 查询,看看为什么它返回的记录比我的 SQL 不正确吗?谢谢,我已经看了一段时间了!
毕竟这里的所有建议都是我更新的 LINQ:
returnVal = context.ReservationRequests
.Where(s => ((s.RequestStatusId.HasValue) &&
(s.RequestStatusId.Value == ResStatusId)) &&
(s.SubmitterGroupName == loggedInUserRole ||
s.CreatedBy == ApplicationSecurityDirector.CurrentUserGuid))
.Skip(skip)
.Take(take)
.ToList();
所以问题:如果loggedInUserRole 为空,此查询是否有效?如果 loggedInUserRole 为 null,那么我只想返回由登录用户创建的记录。
另一个更新:(2017 年 9 月 22 日)上午 9.54 所以我运行了那个声明。在将用户分配到组但未将用户分配到组而不是仅显示登录用户打开的请求的情况下,它可以正常工作,它会返回更多记录。
【问题讨论】:
-
查询看起来与 sql 查询不同
-
多余的括号过多会破坏可读性
-
顺便说一句,你的sql查询也没多大意义,看
SubmitterGroupName != null or SubmitterGroupName = null OR... -
RequestStatusId?.Value == ResStatusId ,试试这个也能给出更清晰的查询
-
(string.IsNullOrEmpty(loggedInUserRole) || s.SubmitterGroupName == loggedInUserRole) 这将是 (string.IsNullOrEmpty(loggedInUserRole) && s.SubmitterGroupName == loggedInUserRole)
标签: c# mysql sql-server linq