【发布时间】:2015-02-28 08:14:43
【问题描述】:
我有三个表“Applications”、“UserPermissions”和“ADPermissions”。
应用程序表包含应用程序列表。 UserPermissions 表定义允许哪个用户管理特定应用程序。同样,“ADPermissions”表定义了哪个 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();
- 我怎样才能在这种情况下获得独特的结果?
- 如何根据我拥有的 AD 组名称对上述组应用过滤器,而不是在从 SQL Server 检索到数据后过滤数据?
- 这是一种正确的方法吗?
请帮忙。
【问题讨论】:
-
您是否有理由同时需要两个结果?一次获取 userPermissions 并在第二次获取 ADPermissions 不是更好吗?
-
至于获得独特的结果:考虑在您调用
ToList()之后,对Distinct()的调用正在作用于匿名对象列表-sinceDistinctuses the default equality comparer,您可能会得到您期望的结果。
标签: c# sql-server linq