簡體   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