使用 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> { }
非常感谢任何帮助/建议。