【发布时间】:2010-11-25 23:13:05
【问题描述】:
为什么微软只为一张表使用带有 GroupBy 子句的愚蠢示例?
http://msdn.microsoft.com/en-us/library/bb896341.aspx
为什么当我尝试选择一些不在 GroupBy 中的字段时会导致错误? 错误表示当前上下文中不存在 GroupBy 子句中不存在的字段。
using (Entities db = new Entities())
{
var query = "SELECT RLS.RoleId, UIR.UserId, UIR.RoleId, USR.UserName FROM Entities.aspnet_Roles AS RLS " +
"INNER JOIN Entities.vw_aspnet_UsersInRoles AS UIR " +
"ON RLS.RoleId = UIR.RoleId " +
"INNER JOIN Entities.aspnet_Users AS USR " +
"ON UIR.UserId = USR.UserId " +
//"GROUP BY RLS.RoleId" // is uncomment - it says UserId doesn't exist in context
;
var x = new ObjectQuery<DbDataRecord>(query, db);
var y = x.ToTraceString().Replace("\n", " ").Replace("\t", " ").Replace("\r", " ");
}
LINQ 也一样:
var x = from RLS in db.aspnet_Roles
join URS in db.vw_aspnet_UsersInRoles
on RLS.RoleId equals URS.RoleId
join USR in db.aspnet_Users
on URS.UserId equals USR.UserId
group RLS by RLS.RoleId into GRP
select new
{
GRP.Key
};
问题是:如何选择所有字段和GroupBy只选择一个字段?
提前致谢。
【问题讨论】:
-
您能解释一下您希望如何选择所有字段并对记录进行分组吗?您是否正在寻找唯一的字段集,在这种情况下您正在寻找 DISTINCT,或者您是否希望将记录与具有相同 RoleId 的所有条目一起交付,在这种情况下您正在寻找 ORDERBY。
-
当人们尝试映射成员表并通过 EF 模型对其进行查询时,我仍然感到惊讶 - 使用提供程序 API!
-
RPM1984:如果你这么聪明,在这种情况下你可以回答如何添加 OrderBy、Distinct 并选择 3 个角色中的所有用户 + 那些使用 Provider API 没有任何角色的用户?我的角色很少,用户也很少。一个用户可以出现在多个角色中。为了防止用户重复,我想按 RoleId 对选择结果进行分组。
-
Lazarus:你可能是对的,在我的情况下最好使用 DISTINCT。谢谢。
-
Lazarus:虽然没有,但实际上 DISTINCT 并没有帮助,因为这是一个 JOINed 结果,所以无论如何记录都会有所不同......所以这是 GROUP BY 的情况
标签: asp.net sql linq entity-framework