在MVC 6中具有单一角色的用户列表已离开加入

时间:2016-04-21 10:41:51

标签: asp.net-core-mvc entity-framework-core asp.net-identity-3

使用VS 2015,MVC 6 RC1和EF 7 RC1我尝试获取具有单个角色名称的所有用户的列表。

我已尝试过在StackOverflow上遇到的所有建议,但都没有。

我正在寻找的SQL是:

SELECT [User].[Email], [Role].[Name]
FROM [User]
LEFT JOIN [UserRoles] ON [User].[Id] = [UserRoles].[UserId]
LEFT JOIN[Role] ON [UserRoles].[RoleId] = [Role].[Id]

我已经编写了以下内容并在LinqPad上进行了测试(工作正常)并且应该在我的项目中工作但是会出现错误:

var q1 = (from user in _context.Users
          join ur in _context.UserRoles on user.Id equals ur.UserId into grp1
          from fgrp1 in grp1.DefaultIfEmpty()
          join r in _context.Roles on fgrp1.RoleId equals r.Id into grp2
          from fgrp2 in grp2.DefaultIfEmpty()
          select new { UserEmail = user.Email, UserRoleName = fgrp2.Name }).ToList();

错误信息是:

An unhandled exception occurred while processing the request.
InvalidOperationException: Sequence contains no elements
System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)

我不知道它是否有任何区别,但我创建了自己的角色实体:

public class ExtranetRole : IdentityRole<int> { }

和我自己的用户实体:

public class ExtranetUser : IdentityUser<int> { }

非常感谢任何帮助/建议。

1 个答案:

答案 0 :(得分:0)

EF7 RC1有一些与LEFT连接有关的错误。检查https://github.com/aspnet/EntityFramework/issues/3629 - 它看起来与您的问题非常相似。

我认为EF版本之前的最佳解决方案是分别读取所有三个表并使用linq(对象)将它们连接到内存中。保证工作:)