【发布时间】:2018-06-01 17:33:14
【问题描述】:
我在执行分组后尝试选择所有键。如果我将组放入一个变量然后对变量执行选择,但不是直接在组之后,它会起作用。我不知道为什么。
这不起作用:
var pureUsers = from u in userContext.Users
join ur in userContext.UserRoles on u.UserID equals ur.UserID
join r in userContext.Roles on ur.RoleID equals r.RoleID
join sm in userContext.SystemMasters on r.SystemMasterID equals sm.SystemMasterID
where sm.SystemName == "PURE"
group ur.UserRoleID by u.SAPID into g
select g.Key;
它给了我错误,“'string' 不包含'Key' 的定义,并且找不到接受'string' 类型的第一个参数的扩展方法'Key'”
但是,它的工作原理是这样的:
var pureUsers = from u in userContext.Users
join ur in userContext.UserRoles on u.UserID equals ur.UserID
join r in userContext.Roles on ur.RoleID equals r.RoleID
join sm in userContext.SystemMasters on r.SystemMasterID equals sm.SystemMasterID
where sm.SystemName == "PURE"
group ur.UserRoleID by u.SAPID
var happy = pureUsers.Select(x => x.Key);
我也试过了:
var pureUsers = (from u in userContext.Users
join ur in userContext.UserRoles on u.UserID equals ur.UserID
join r in userContext.Roles on ur.RoleID equals r.RoleID
join sm in userContext.SystemMasters on r.SystemMasterID equals sm.SystemMasterID
where sm.SystemName == "PURE"
group ur.UserRoleID by u.SAPID).Select(x => x.Key);
它给了我同样的错误。我看不出这与将其放入 pureUsers 然后进行选择有何不同。另外,如果有更好的不涉及分组的方法,请告诉我。我按 SAPID 对其进行分组,因为用户可以有许多 UserRoles,并且我想要一个 Users.SAPID 列表,其中每个 SAPID 显示一次。
【问题讨论】:
-
为什么不用
group by而不是selectDistinct()?
标签: c# sql entity-framework linq group-by