Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq中使用多个表进行左连接_C#_Sql Server_Linq - Fatal编程技术网

C# 在Linq中使用多个表进行左连接

C# 在Linq中使用多个表进行左连接,c#,sql-server,linq,C#,Sql Server,Linq,我有三个表“Applications”、“UserPermissions”和“ADPermissions” 应用程序表包含应用程序列表。UserPermissions表定义允许哪个用户管理特定应用程序。类似地,“ADPermissions”表定义了哪个AD组具有管理应用程序的权限 当用户登录到管理应用程序(网站)时,我必须根据他的别名和他所属的所有广告组显示他有权访问的所有应用程序。我试图编写一个Linq查询,如下所示,但这会给我重复的结果。此外,我还有一些其他问题 //List of grou

我有三个表“Applications”、“UserPermissions”和“ADPermissions”

应用程序表包含应用程序列表。UserPermissions表定义允许哪个用户管理特定应用程序。类似地,“ADPermissions”表定义了哪个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();
//来自AD的组列表
var groups=(来自UserPrincipal.Current.GetGroups()中的g)
选择g.Name).ToArray();
IdentityContext上下文=新的IdentityContext();
变量应用=
(来自上下文中的应用程序)
在context.UserPermissions中加入.Id等于up.ClientId的appUsers
从appUsers.DefaultIfEmpty()中的up开始
将a.Id等于gp.ClientId的context.ADPermissions中的gp加入appGroups
来自appGroups.DefaultIfEmpty()中的gp
选择新的
{
Id=a.Id,
ClientId=a.ClientId,
DisplayName=a.ClientName,
使能的,使能的,
ClientUri=a.ClientUri,
UserPermissions=a.UserPermissions,
GroupPermissions=a.ADPermissions
}).ToList().Distinct();
  • 如何在此场景中获得独特的结果
  • 如何根据我拥有的广告组名称对上述组应用筛选器,而不是在从SQL server检索后对数据进行筛选
  • 这是正确的方法吗

  • 请提供帮助。

    您可以使用“分组方式”而不是“区分方式”,

    是否有理由同时需要这两个结果?在一个通道中获取用户权限和第二个权限是不是更好?至于获得独特的结果:考虑到在调用了<代码> Telistor()/Cube >之后,对<代码>区别()/代码>的调用在一个匿名对象列表上起作用,怀疑您将得到预期的结果。