繁体   English   中英

C#在Queryable中使用Linq

[英]C# using Linq in Queryable

我对Linq有点陌生,希望有人可以帮助我解决当前遇到的问题。

我目前有2个清单

public IQueryable<TRole> Roles
{
   get
   {
      var roles = new List<TRole>();
      roles.Add(CreateIdentityRole("Chairman", "Voorzitter"));
      roles.Add(CreateIdentityRole("Treasurer", "Penningmeester"));
      roles.Add(CreateIdentityRole("Ranking Responsible", "Rankingverantwoordelijke"));
                roles.Add(CreateIdentityRole("Competition Responsible", "Competitieverantwoordelijke"));
      roles.Add(CreateIdentityRole("Webmaster", "Webbeheerder"));
      roles.Add(CreateIdentityRole("Secretary", "Secretaris"));
      foreach(TRole role in roles)
      {
         if (!_roles.Contains(role))
            _roles.Add(role);
      }

      return _roles.AsQueryable<TRole>();
   }
}

private TRole CreateIdentityRole(string id, string name)
{
   TRole role = (TRole)Activator.CreateInstance(typeof(TRole));
   role.Id = id;
   role.Name = name;
   return role;
}

public void InitializePrivacy(IdentityUser user)
{
   var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
   var roleManager = new RoleStore<IdentityRole>();
   var roles = roleManager.Roles;
   List<string> userRoles = manager.GetRoles(user.Id);
}

现在,我想使用Linq获取在userRoles中找不到的所有角色。 因为角色是可查询的,所以我现在实际上并不是如何实现这种结果。

一个简单的.Except()应该足够了:

using System.Linq;
//...
var roles = roleManager.Roles.ToList();
List<string> userRoles = manager.GetRoles(user.Id);
var ununsedRoles = roles.Execpt(userRoles);

这将为您提供所有项目角色,但userRoles角色除外。

MSDN: https//msdn.microsoft.com/zh-CN/library/bb300779(v = vs.110) .aspx

您可以使用IEnumerable接口。 如果您的方法返回Querable结果,它将起作用。 尝试这个:

IEnumerable<string> roles = roleManager.Roles;
List<string> userRoles = GetRoles(user.Id);

var result = roles.Except(userRoles);

要获取在userRoles找不到的userRoles

var rolesNotFound = roleManager.Roles
                      .Where(r => !userRoles.Select(u => u.Id).Contains(r.Id))
                      .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM