【问题标题】:select key after group分组后选择键
【发布时间】: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 而不是select Distinct()

标签: c# sql entity-framework linq group-by


【解决方案1】:

怎么样:

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"
                 select u.SAPID).Distinct();

【讨论】:

  • 出于某种原因,我认为 Distinct() 不会起作用。我只是陷入了错误的方向。我仍然不知道为什么将它分组然后在选择之前将其设置在变量中。
  • @bobpal 不应该。在我的(LINQ to Objects)演示中,无论哪种方式都可以正常工作。
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多