使用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> { }
非常感谢任何帮助/建议。
答案 0 :(得分:0)
EF7 RC1有一些与LEFT连接有关的错误。检查https://github.com/aspnet/EntityFramework/issues/3629 - 它看起来与您的问题非常相似。
我认为EF版本之前的最佳解决方案是分别读取所有三个表并使用linq(对象)将它们连接到内存中。保证工作:)