加入身份和另一个 Table
Join on Identity and Another Table
我想弄清楚如何在 Identity 和我拥有的另一个 table 上创建连接语句,在本例中为 TeamMember。
这是我尝试过的:
var j =
Db.TeamMembers.Join(MemberManager.Users,
c => c.MemberId,
cm => cm.Id,
(c, cm) => new {TeamMember = c, Member = cm})
.Where(m => m.TeamMember.TeamId == team.Id && !m.TeamMember.MemberId.Equals(team.CaptainId));
List<TeamMember> teamMembers = new List<TeamMember>();
foreach (var result in j)
{
var teamMember = new TeamMember
{
GameDisplayName = result.Member.Alias
};
teamMembers.Add(teamMember);
}
我的错误是
The specified LINQ expression contains references to queries that are associated with different contexts.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NotSupportedException: The specified LINQ expression contains references to queries that are associated with different contexts.
是说MemberManager
和Db
是不同的对象。它必须查询一个并将结果传递给另一个才能实现此功能(想象一下,如果它们指向不同的数据库),默认情况下它不愿意这样做,因为这比没有。
简单的选项就是把MemberManager.Users
改成Db.Users
。如果我正确理解您的设置,应该可以解决问题。
就是说,我根本不明白为什么 MemberManager
存在,所以也许我不明白。在这种情况下,您必须执行以下操作:
var team = /*...*/;
var teamMembers = Db.TeamMembers
.Where(c => c.TeamId == team.Id && c.MemberId != team.CaptainId)
.ToList();
var teamMemberIds = teamMembers.Select(c => c.MemberId);
var members = MemberManager.Users
.Where(c => teamMemberIds.Any(x => c.Id == x))
.ToList();
var j = teamMembers
.Join(members, c => c.MemberId, cm => cm.Id, (c, cm) => new
{
TeamMember = c,
Member = cm
});
如果可以,最好避免这种情况,因为这是两个独立的服务器调用。但它确实允许您使用多个上下文。
我想弄清楚如何在 Identity 和我拥有的另一个 table 上创建连接语句,在本例中为 TeamMember。
这是我尝试过的:
var j =
Db.TeamMembers.Join(MemberManager.Users,
c => c.MemberId,
cm => cm.Id,
(c, cm) => new {TeamMember = c, Member = cm})
.Where(m => m.TeamMember.TeamId == team.Id && !m.TeamMember.MemberId.Equals(team.CaptainId));
List<TeamMember> teamMembers = new List<TeamMember>();
foreach (var result in j)
{
var teamMember = new TeamMember
{
GameDisplayName = result.Member.Alias
};
teamMembers.Add(teamMember);
}
我的错误是
The specified LINQ expression contains references to queries that are associated with different contexts.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NotSupportedException: The specified LINQ expression contains references to queries that are associated with different contexts.
是说MemberManager
和Db
是不同的对象。它必须查询一个并将结果传递给另一个才能实现此功能(想象一下,如果它们指向不同的数据库),默认情况下它不愿意这样做,因为这比没有。
简单的选项就是把MemberManager.Users
改成Db.Users
。如果我正确理解您的设置,应该可以解决问题。
就是说,我根本不明白为什么 MemberManager
存在,所以也许我不明白。在这种情况下,您必须执行以下操作:
var team = /*...*/;
var teamMembers = Db.TeamMembers
.Where(c => c.TeamId == team.Id && c.MemberId != team.CaptainId)
.ToList();
var teamMemberIds = teamMembers.Select(c => c.MemberId);
var members = MemberManager.Users
.Where(c => teamMemberIds.Any(x => c.Id == x))
.ToList();
var j = teamMembers
.Join(members, c => c.MemberId, cm => cm.Id, (c, cm) => new
{
TeamMember = c,
Member = cm
});
如果可以,最好避免这种情况,因为这是两个独立的服务器调用。但它确实允许您使用多个上下文。