CRM 2013使用LINQ检索给定用户的所有团队

时间:2014-09-08 01:07:34

标签: c# linq dynamics-crm dynamics-crm-2013

我正在尝试使用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提供商。

1 个答案:

答案 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();