我正在尝试使用LINQ和早期绑定实体检索用户所属的所有团队。我在这做错了什么。
我将SystemUser用户作为函数的参数传递给
var teams = (from teamList in crmContext.CreateQuery<Team>()
join mapping in crmContext.CreateQuery<TeamMembership>()
on teamList.Id equals mapping.TeamId
join users in crmContext.CreateQuery<SystemUser>()
on user.Id equals users.Id
select teamList
).ToList();
据我了解,我首先返回所有团队,然后加入以获得拥有会员资格的团队,最后是与用户的会员资格匹配给定用户的ID。
失败,出现以下错误Sequence contains no matching element
。我有一个解除关联消息的消息,消除团队从用户中删除。
我在这里缺少什么?
编辑:
我也尝试过这个。
var allteams = (from users in crmContext.CreateQuery<SystemUser>() where users.Id == user.Id join mapping in crmContext.CreateQuery<TeamMembership>() on users.Id equals mapping.SystemUserId join teams in crmContext.CreateQuery<Team>() on mapping.TeamId equals teams.Id select teams).ToList();
但是,我收到了这条消息。
“加入”方法不能遵循“何处”或“不在何处”的方法 支持的。尝试根据支持的方法或调用编写查询 调用不支持之前的'AsEnumerable'或'ToList'方法 方法
我相信这是因为CRM 2013的LINQ提供商。
答案 0 :(得分:3)
关于第二次尝试,请尝试将where
子句移到select
子句之前的末尾:
var allteams = (from users in crmContext.CreateQuery<SystemUser>()
join mapping in crmContext.CreateQuery<TeamMembership>()
on users.Id equals mapping.SystemUserId
join teams in crmContext.CreateQuery<Team>()
on mapping.TeamId equals teams.Id
where users.Id == user.Id
select teams
).ToList();