左连接Linq中的多个表

时间:2015-02-27 22:17:04

标签: c# sql-server linq

我有三张桌子"应用程序"," UserPermissions"和" ADPermissions"。

应用程序表包含应用程序列表。 UserPermissions表定义允许哪个用户管理特定应用程序。同样地" ADPermissions" table定义哪个AD组有权管理应用程序。

当用户登录管理应用程序(网站)时,我必须根据他的别名和他所属的所有AD组显示他有权访问的所有应用程序。我正在尝试编写如下所示的Linq查询,但这给了我重复的结果。我还有其他一些问题。

//List of groups from AD
var groups = (from g in UserPrincipal.Current.GetGroups()
              select g.Name).ToArray<String>();

IdentityContext context = new IdentityContext();

var apps = 
       (from a in context.Applications
        join up in context.UserPermissions on a.Id equals up.ClientId into appUsers
        from up in appUsers.DefaultIfEmpty()
        join gp in context.ADPermissions on a.Id equals gp.ClientId into appGroups
        from gp in appGroups.DefaultIfEmpty()
        select new
        {
            Id = a.Id,
            ClientId = a.ClientId,
            DisplayName = a.ClientName,
            Enabled = a.Enabled,
            ClientUri = a.ClientUri,
            UserPermissions = a.UserPermissions,
            GroupPermissions = a.ADPermissions
        }).ToList().Distinct();
  1. 如何为此方案获得独特的结果?
  2. 如何根据我拥有的AD组名称将过滤器应用于上述组,而不是在检索表单SQL Server后过滤数据?
  3. 这是一种正确的方法吗?
  4. 请帮忙。

1 个答案:

答案 0 :(得分:0)

您可以使用group by而不是distinct,  click here to see an exapmle